当前位置:编程学习 > C#/ASP.NET >>

关于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#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,