我对 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 上的文档指出“该函数应开始向所有受影响的组件发送通知,但应在通知过程开始后立即返回”。
当我在 ptr 上调用 FreeHGlobal 时,我是否应该担心释放仍然可以在某处使用的内存,或者 SHChangeNotify 是否对字符串的副本起作用?
我的测试表明我的代码正在运行,但我不想部署它并看到以后出现问题......