Goodspeed

导航

正确停止线程

using System;
using System.Threading;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            var p = new Program();
            p.Do();
            p.Stop();
        }

        CancellationTokenSource cts = new CancellationTokenSource();

        void Do()
        {
            var worker = new Thread(() =>
            {
                while (true)
                {
                    if (cts.Token.IsCancellationRequested) //检查是否有取消请求
                    {
                        //处理收尾工作
                        Console.WriteLine("this worker was stoped");
                        break;
                    }

                    Console.WriteLine(DateTime.Now);
                    Thread.Sleep(1000);
                }
            });
            worker.Start();
        }

        void Stop()
        {
            Console.ReadKey();
            cts.Cancel(); //发出取消请求
            cts.Token.Register(() => { //进程被停止后通知
                Console.WriteLine("worker has been stoped!");
            });
            Console.ReadKey();
        }
    }
}

 

posted on 2014-11-02 10:02  Goodspeed  阅读(531)  评论(0编辑  收藏  举报