【发布时间】:2010-11-16 09:50:30
【问题描述】:
- 为什么会收到此错误消息? “不支持 STA 线程上的多个句柄的 WaitAll。”
- 我应该使用 [MTAThreadAttribute] 属性吗? 更新:不适用于 WPF 应用程序!
注意: 错误在 WaitHandle.WaitAll(doneEvents); 我正在使用标准的 WPF 项目。
private void Search()
{
const int CPUs = 2;
var doneEvents = new ManualResetEvent[CPUs];
// Configure and launch threads using ThreadPool:
for (int i = 0; i < CPUs; i++)
{
doneEvents[i] = new ManualResetEvent(false);
var f = new Indexer(Paths[i], doneEvents[i]);
ThreadPool.QueueUserWorkItem(f.WaitCallBack, i);
}
// Wait for all threads in pool
WaitHandle.WaitAll(doneEvents);
Debug.WriteLine("Search completed!");
}
更新:以下解决方案不适用于 WPF 应用程序! 无法将主应用程序属性更改为 MTAThreadAttribute。这将导致以下错误:
错误:“不支持 STA 线程上的多个句柄的 WaitAll。”
【问题讨论】:
-
您意识到您的应用程序将完全冻结,直到那些索引器完成?
-
是的!我知道。但实际上它并没有运行。
-
同样的错误,但解决方案不适用于 WPF 应用程序!您不能更改 WPF 应用程序的主要方法属性。
标签: c# multithreading threadpool