【发布时间】:2015-06-10 21:24:10
【问题描述】:
我在我的应用程序中实现了Shell Namespace Extensions
我实现的接口之一是 IShellFolder 和 IShellFolder2
当资源管理器调用 EnumObjects 时,一切正常,我想以异步方式在资源管理器上显示进度条。
今天当我在 EnumObjects 函数中返回 explorer IEnumIDList 时,explorer 调用了 IEnumIDList.Next。在该功能中,我的代码执行可能需要约 20 秒的大规模操作,在那段时间资源管理器卡住并且没有响应。
我所看到的如果我返回资源管理器约 200 个项目,然后大规模操作资源管理器将显示进度条并做出响应。
有人知道如何强制资源管理器响应并显示进度条而不返回虚拟项目吗?
【问题讨论】:
-
无法确认您遇到的问题。在我的 NSE 中,IEnumIDList 总是在单独的线程中创建和使用,并且 UI 总是响应式的。您使用什么操作系统版本?
-
我使用的是 windows 7 x64 。您是否尝试卡住 Next 功能并用鼠标移动资源管理器的当前寡妇?
-
我也在使用 Win7 x64。而且我可以在长时间的 Next 执行期间移动和调整 Explorer 窗口的大小。
-
@Beno:Windows 资源管理器使用
IShellFolderViewCB::MessageSFVCB()与IShellView通信,其中定义的消息之一是SFVM_BACKGROUNDENUM:“允许回调对象在后台线程上请求枚举.”。 -
谢谢,这是一个非常好的信息。我将尝试查看我的代码中的潜在问题
标签: c++ shell winapi explorer shell-extensions