2

我对 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 是否对字符串的副本起作用?

我的测试表明我的代码正在运行,但我不想部署它并看到以后出现问题......

4

1 回答 1

4

SHChangeNotify获取您的字符串的副本。一旦调用SHChangeNotify返回,您就可以安全地并且确实应该释放内存。

于 2011-11-08T21:56:08.480 回答