版本 10
                        2025/10/9 9:36:44
                        问题分析
原来的C#实现使用的是 SendMessageTimeout 方法,这是一种同步调用,会等待所有窗口处理完消息才会返回。当系统负载较重时,这个过程会变得很慢,导致用户感觉界面刷新有延迟。
解决方案
我添加了一个新的刷新方法 RefreshExplorerMethod1Fast(),它使用 PostMessage API 替代 SendMessageTimeout。这种方法的特点是:
非阻塞调用:PostMessage 将消息放入目标窗口的消息队列后立即返回,不会等待消息被处理
立即执行:无论系统负载如何,调用都会立即完成
系统范围通知:仍然能够有效地通知所有顶层窗口主题已更改
具体修改内容
添加了 PostMessage API 的导入声明:
csharp
[DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Unicode)]
private static extern bool PostMessage(
    IntPtr hWnd,
    uint Msg,
    IntPtr wParam,
    IntPtr lParam);
实现了新的快速刷新方法 RefreshExplorerMethod1Fast():
使用 PostMessage 发送 WM_SETTINGCHANGE 消息
正确处理了字符串参数的内存分配和释放
这是一种非阻塞调用,不会等待其他程序处理完毕
更新了 RefreshExplorer() 方法:
在刷新方法列表中增加了新的快速方法
保持了原有的容错机制,如果快速方法失败还会尝试其他方法
现在,当系统繁忙时,程序会首先尝试原有的可靠但可能较慢的方法,如果耗时过长,则会使用新的快速刷新方式,从而确保在各种情况下都能快速响应用户的操作。
这个修改无需您进行任何额外操作,已经直接应用到了您的代码中。
                    
                    
                        
                            | 操作人 | 时间 | 分值 | 意见及建议 | 状态变更 | 
                            
                                | CL | 22天14小时前 |  | (管理员审核) | 已提交,待审核
                                        →
                                        已发布 | 
                            
                                | *系统* | 22天19小时前 |  | (发布或更新动作) | 已发布
                                        →
                                        已提交,待审核 |