读书人

线程池!怎么停止线程池(ThreadPool)

发布时间: 2012-04-09 13:41:25 作者: rapoo

线程池高手请进!如何停止线程池(ThreadPool)中的线程!
最近写一小程序,使用到了线程池(ThreadPool)。程序界面上有个停止按钮,点下停止按钮后,我需要停止线程池中的所有工作线程不知如何操作,请高手指教!。
现在我代码结构是这样的,两个类:WorkManager,WorkThread 第一个类是用来产生工作线程和控制工作线程的。现在想停止线程池中的线程却不知道怎么操作,尝试过工作线程注册管理线程的事件,由事件通知工作线程内部使用Thread.CurrentThread.Abort();进行停止也不行。。。真没辙了。



[解决办法]
abort不是管理线程的好办法
http://topic.csdn.net/u/20120113/11/3fd689ca-4ddb-4c74-a746-06ff73dc7406.html
[解决办法]
在.NET4.0中CancellationTokenSource可以实现。
[解决办法]

C# code
   private static void CancellingAWorkItem() {        CancellationTokenSource cts = new CancellationTokenSource();        // Pass the CancellationToken and the number-to-count-to into the operation        ThreadPool.QueueUserWorkItem(o => Count(cts.Token, 1000));        Console.WriteLine("Press <Enter> to cancel the operation.");        Console.ReadLine();        cts.Cancel();  // If Count returned already, Cancel has no effect on it        // Cancel returns immediately, and the method continues running here...        Console.ReadLine();  // For testing purposes    }    private static void Count(CancellationToken token, Int32 countTo) {        for (Int32 count = 0; count < countTo; count++) {            if (token.IsCancellationRequested) {                Console.WriteLine("Count is cancelled");                break; // Exit the loop to stop the operation            }            Console.WriteLine(count);            Thread.Sleep(200);   // For demo, waste some time        }        Console.WriteLine("Count is done");    }
[解决办法]
探讨
C# code
private static void CancellingAWorkItem() {
CancellationTokenSource cts = new CancellationTokenSource();

// Pass the CancellationToken and the number-to-count-to into t……

读书人网 >C#

热点推荐