C# BackgroundWorker的一个Demo

12 篇文章 0 订阅

BackgroundWorker作用基本就能用名字来表达了

具体工作内容函数

        static void Worker_DoWork(object sender, DoWorkEventArgs e)
        {
            Console.WriteLine("doworker thread pool thread id: {0}", Thread.CurrentThread.ManagedThreadId);
            var bw = (BackgroundWorker)sender;
            for(int i = 1; i <= 100; i ++)
            {
                if (bw.CancellationPending)
                {
                    e.Cancel = true;
                    return;
                }
                if(0 == i %10)
                {
                    bw.ReportProgress(i);
                }
                Thread.Sleep(TimeSpan.FromSeconds(0.1));
            }
            e.Result = 42;
        }

进度处理函数

        static void Worker_ProgressChanged(object sender, ProgressChangedEventArgs e)
        {
            Console.WriteLine("{0}% completed. progress thread pool thread id: {1}",
                e.ProgressPercentage,
                Thread.CurrentThread.ManagedThreadId);
        }

任务结束,用于断后的函数

        static void Worker_Completed(object sender, RunWorkerCompletedEventArgs e)
        {
            Console.WriteLine("completed thread pool thread id: {0}",
                Thread.CurrentThread.ManagedThreadId);
            if(e.Error != null)
            {
                Console.WriteLine("exception {0} has occured.",
                    e.Error.Message);
            }
            else if(e.Cancelled)
            {
                Console.WriteLine("operation has been canceled.");
            }
            else
            {
                Console.WriteLine("the answer is {0}", e.Result);
            }
        }

调用函数

        static void Main(string[] args)
        {
            var bw = new BackgroundWorker();
            bw.WorkerReportsProgress = true;
            bw.WorkerSupportsCancellation = true;

            bw.DoWork += Worker_DoWork;
            bw.ProgressChanged += Worker_ProgressChanged;
            bw.RunWorkerCompleted += Worker_Completed;
            bw.RunWorkerAsync();

            Console.WriteLine("Press c to cancel work");
            do
            {
                if (Console.ReadKey(true).KeyChar == 'c')
                {
                    bw.CancelAsync();
                    Console.WriteLine("work canceled");
                }
            }
            while (bw.IsBusy);

            Console.ReadKey();
        }


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值