【问题标题】:IShellFolder.EnumObjects - Async on windows explorerIShellFolder.EnumObjects - Windows 资源管理器上的异步
【发布时间】: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


【解决方案1】:

Windows 7 总是使用单独的线程进行项目枚举。在您的情况下,资源锁定是 UI 冻结的原因。

【讨论】:

  • 嗨丹尼斯,我发现了问题,就像你说的那样。主线程要求文件的图标。该动作是同步的,一旦我发布它就可以了,谢谢:)
猜你喜欢
  • 1970-01-01
  • 2023-03-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-06
  • 2013-10-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多