关于WINFORM调用线程池的问题!
private void btnTheadPoolStart_Click(object sender, EventArgs e){
const int FibonacciCalculations = 10;
ManualResetEvent[] doneEvents = new ManualResetEvent[FibonacciCalculations];
for (int i = 0; i < FibonacciCalculations; i++)
{
doneEvents[i] = new ManualResetEvent(false);
ThreadPool.QueueUserWorkItem(new WaitCallback(ViewCodeNumber),_path);
}
//WaitHandle.WaitAll(doneEvents); 这里报错,说是只有一个线程在等待!
CountAllCode();
}
namespace CountCode
{
static class Program
{
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread] //如果把这里改为[MTAThread] 程序就出错,
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new MainForm());
}
}
请问是为什么啊,在winform中不能用线程池吗?
--------------------编程问答-------------------- 谢谢大家,是不是winform的问题? --------------------编程问答-------------------- ding --------------------编程问答-------------------- 我想楼主没有理解ThreadPool.QueueUserWorkItem的意思,这个方法是要把要做的事情在一条后台线程排队去处理,还有你的doneEvents在这里你根本没用它去同步
ThreadPool.QueueUserWorkItem(new WaitCallback(ViewCodeNumber),_path);//不知道你的_path是什么变量,但这里你必须想办法传入doneEvents[i]
ThreadPool.QueueUserWorkItem(new WaitCallback(ViewCodeNumber),doneEvents[i]); //传入doneEvents[i],在ViewCodeNumber里面发出通知信号,以释放WaitHandle
按你的本意,这里你不应该使用线程池,而应该每次都开一条新线程,这样WaitHandle.WaitAll(doneEvents)才合理
补充:.NET技术 , C#