Windows 从多个线程使用IShellFolder

Windows 从多个线程使用IShellFolder,windows,winapi,windows-shell,Windows,Winapi,Windows Shell,我想从后台线程调用IShellFolder.EnumObjects,以避免在枚举需要大量时间的情况下冻结GUI线程 在GUI线程中获得(并使用)IShellFolder界面。将指针传递到后台线程的正确方法是什么 使用CoMarshalInterThreadInterfaceInStream封送接口指针 直接将接口指针传递给另一个线程 那么返回的PIDL呢?它们可以在线程之间安全地交换吗 线程使用STA线程模型。我不相信您可以在另一个线程的另一个线程中使用IShell文件夹。shell接口无法封送

我想从后台线程调用
IShellFolder.EnumObjects
,以避免在枚举需要大量时间的情况下冻结GUI线程

在GUI线程中获得(并使用)IShellFolder界面。将指针传递到后台线程的正确方法是什么

  • 使用
    CoMarshalInterThreadInterfaceInStream
    封送接口指针

  • 直接将接口指针传递给另一个线程

  • 那么返回的PIDL呢?它们可以在线程之间安全地交换吗


    线程使用STA线程模型。

    我不相信您可以在另一个线程的另一个线程中使用IShell文件夹。shell接口无法封送,并且不是自由线程,因此选项1和2不起作用。PIDL(严格地说是指针所指的列表)是全局的,因此它们可以与其他线程和其他进程交换。在线程中创建并使用
    IShellFolder
    接口即可good@Ross本文提到多线程单元,而在我的例子中,我使用了几个(2-3)单线程单元线程。测试表明这两个选项都有效。。。但是我仍然对它是否是完成任务的正确方式感兴趣。@David我考虑过它,但由于接口已经在主线程中获得,我想也许我可以节省一些CPU周期并重新使用它?但对于线程模型,你不能。PIDL可以跨线程传递。