本文介绍了不支持为WaitAll用于在STA线程多个句柄的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
- 为什么我得到这个错误信息? 为WaitAll用于在STA线程,不支持多个句柄。
- 我应该用[MTAThreadAttribute] attribut? 更新:不到风度与WPF应用程序工作
- Why do I get this error message? "WaitAll for multiple handles on a STA thread is not supported."
- Should I use [MTAThreadAttribute] attribut? Update: Dosn't work with WPF applications!
请注意:
这错误是在行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。这将导致以下错误:
Update: The following solution doesn’t work for WPF applications!It is not possible to change the main application attribute to MTAThreadAttribute. It will result in the following error:
错误:
推荐答案
怎么样使用任务做你的线程你。
What about using the Tasks to do your threading for you.
http://msdn.microsoft.com/en-us/library/system.threading.tasks.task.aspx
var task1 = Task.Factory.StartNew(() => DoSomeWork());
var task2 = Task.Factory.StartNew(() => DoSomeWork());
var task3 = Task.Factory.StartNew(() => DoSomeWork());
Task.WaitAll(task1, task2, task3);
这篇关于不支持为WaitAll用于在STA线程多个句柄的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!