Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 当使用SHCNF_FLUSHNOWAIT参数调用SHChangeNotify时,是否可以释放为参数分配的内存?_C#_Pinvoke_Shell32 - Fatal编程技术网

C# 当使用SHCNF_FLUSHNOWAIT参数调用SHChangeNotify时,是否可以释放为参数分配的内存?

C# 当使用SHCNF_FLUSHNOWAIT参数调用SHChangeNotify时,是否可以释放为参数分配的内存?,c#,pinvoke,shell32,C#,Pinvoke,Shell32,我有以下关于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"

我有以下关于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);
声明“该功能应开始向所有受影响的组件发送通知,但应在通知过程开始后立即返回”

当我在ptr上调用FreeHGlobal时,我应该担心释放仍然可以在某处使用的内存,还是SHChangeNotify可以处理字符串的副本


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

shchangennotify
复制了您的字符串。只要调用
shchangennotify
返回,您就可以安全地释放内存。

如果您仔细想想,这是唯一可行的方法。(否则,您如何知道何时可以安全地释放内存?)