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