我正在使用线程池(不奇怪)管理一组线程。我所试图做的是让他们对信号做的时候,我有:WaitAll和已完成事件的线程问题 - 信号触发异常
ManualResetEvent[] doneEvents = new ManualResetEvent[char_set.Length];
public struct string_char
{
public string[] _str_char;
public ManualResetEvent _doneEvent;
public string_char(string[] str_char, ManualResetEvent doneEvent)
{
_str_char = str_char;
_doneEvent = doneEvent;
}
}
我这里有一个循环,创建一个字符数组,然后创建我的结构的填充字符数组和实例做过事件:
doneEvents[no_of_elements - 1] = new ManualResetEvent(false);
string_char s_c = new string_char(array_holder, doneEvents[no_of_elements - 1]);
ThreadPool.QueueUserWorkItem(ThreadPoolCallback, s_c);
因此,线程被创建,添加到池中,它熄灭欢快和运行时,它完成它设置完成事件时:在主
public void ThreadPoolCallback(Object s_c)
{
string_char _s_c = (string_char)s_c;
//do the calculations...
//when done:
_s_c._doneEvent.Set();
}
返回循环鳕鱼e为等待在这里:
WaitHandle.WaitAll(doneEvents);
Console.WriteLine("All calculations are complete.");
麻烦的是我不断收到异常:
'WaitAll for multiple handles on a STA thread is not supported.'
我已经看过这在谷歌,但它并没有真正的帮助,我在做什么错。这基本上是ms msdn示例的重复,除了我正在使用结构而不是类之外?
我解决了这个问题,使用下面的建议,通过切换到主要的MTA(doh!);了解最大值为64线程数也很有用。所以我将不得不切换到一个不同的等待模式,因为最终的应用程序将运行多一点!很多学习。
谢谢。
谢谢,我喜欢你告诉我你只能有64个线程数的事实。谢谢。 – flavour404