gpt4 book ai didi

c# - 当使用 SHCNF_FLUSHNOWAIT 参数调用 SHChangeNotify 时,我可以释放为参数分配的内存吗?

转载 作者:行者123 更新时间:2023-11-30 21:11:27 25 4
gpt4 key购买 nike

我对 SCHhangeNotify 有以下声明:

[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);

The doc on SHCNF_FLUSHNOWAIT指出“该功能应开始向所有受影响的组件发送通知,但应在通知过程开始后立即返回”。

当我在 ptr 上调用 FreeHGlobal 时,我是否应该担心释放仍然可以在某处使用的内存,或者 SHChangeNotify 是否对字符串的副本起作用?

我的测试表明我的代码可以正常工作,但我不想部署它然后看到问题出现...

最佳答案

SHChangeNotify 获取您的字符串的副本。您可以安全地并且确实应该在对 SHChangeNotify 的调用返回后立即释放内存。

关于c# - 当使用 SHCNF_FLUSHNOWAIT 参数调用 SHChangeNotify 时,我可以释放为参数分配的内存吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8052496/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com