Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 枚举后台线程中的ShellFolder_C#_Multithreading_Windows Api Code Pack - Fatal编程技术网

C# 枚举后台线程中的ShellFolder

C# 枚举后台线程中的ShellFolder,c#,multithreading,windows-api-code-pack,C#,Multithreading,Windows Api Code Pack,是否可以使用Windows API代码包在后台线程中安全地枚举ShellContainer 我正在尝试枚举ShellFolders(桌面、我的电脑等),在遇到阻碍UI的东西之前,一切都很正常。特别是,“网络”大约需要40秒才能返回孩子的列表 我尝试在后台任务中运行,但它似乎正常工作,但一些具有已知子文件夹的文件夹开始失败,并返回没有名称或解析名称的项目。看起来互操作在这一点上已经中断,这让我觉得它不是线程安全的 new Task(() => { // if this fails, t

是否可以使用Windows API代码包在后台线程中安全地枚举ShellContainer

我正在尝试枚举ShellFolders(桌面、我的电脑等),在遇到阻碍UI的东西之前,一切都很正常。特别是,“网络”大约需要40秒才能返回孩子的列表

我尝试在后台任务中运行,但它似乎正常工作,但一些具有已知子文件夹的文件夹开始失败,并返回没有名称或解析名称的项目。看起来互操作在这一点上已经中断,这让我觉得它不是线程安全的

new Task(() =>
{
   // if this fails, the items will be ShellObjects 
   // but will have no parsingnames
   var items = MyShellFolder.ToArray();
   dispatcher.Invoke(() => MyChildren.AddRange(items));
}).Start();

Shell文件夹只能从STA线程枚举。任务始终是MTA。启动线程之前需要调用Thread.SetApartmentState()。确实,谢谢。我切换到解决访问问题的STA线程。