У меня есть следующее объявление для SHChangeNotify:
[DllImport("Shell32.dll")]
public static extern void SHChangeNotify(HChangeNotifyEventID wEventId, HChangeNotifyFlags uFlags, IntPtr dwItem1, IntPtr dwItem2);
Безопасен ли следующий код?
IntPtr ptr = Marshal.StringToHGlobalUni(@"C:\foo\bar.txt");
Shell.SHChangeNotify(SHCNE_UPDATEITEM, SHCNF_PATH | SHCNF_FLUSHNOWAIT, ptr, IntPtr.Zero);
Marshal.FreeHGlobal(ptr);
В документе SHCNF_FLUSHNOWAIT указано, что "Функциядолжен начать доставку уведомлений всем затронутым компонентам, но должен вернуться, как только начнется процесс уведомления ".
Когда я вызываю FreeHGlobal на ptr, следует ли мне беспокоиться об освобождении памяти, которая еще может быть использована где-нибудь, или SHChangeNotify работает с копией строки?
Мои тесты показывают, что мой кодработает, но я не хочу его развертывать и вижу, что проблемы возникнут позже ...