欢迎来到天天文库
浏览记录
ID:37914218
大小:53.50 KB
页数:11页
时间:2019-06-02
《C# BackgroundWorker 控件使用》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、C#BackgroundWorker控件使用分享BackgroundWorker是一个非常不错的线程控件,能避免界面假死,让线程操作你想要做的事,它学习起来很简单,但是能实现很强大的功能。发布这篇文章的目的是将最近学习到的共享出来,大家交流一下,当然我也是菜鸟,在这里你将学习到BackgroundWorker简单使用,停止,暂停,继续等操作,BackgroundWorker比起Thread和ThreadPool要简单太多,为了更方便在实际应用中使用,我使用的是winform,没有使用控制台程序。在UI界面
2、里拖动一个button和richTextBox到界面。我会从最简单的开始,只有最简单的代码才会让人有继续学下去的欲望,下列代码可以将1到999打印到richTextBox1控件上。复制代码代码如下:privatevoidbutton1_Click(objectsender,EventArgse){//创建一个BackgroundWorker线程BackgroundWorkerbw=newBackgroundWorker();//创建一个DoWork事件,指定bw_DoWork方法去做事bw.DoWork+
3、=newDoWorkEventHandler(bw_DoWork);//开始执行bw.RunWorkerAsync();}voidbw_DoWork(objectsender,DoWorkEventArgse){for(inti=0;i<1000;i++){this.richTextBox1.Text+=i+Environment.NewLine;}}但是很不幸,以上代码会报错,报错信息:线程间操作无效:从不是创建控件“richTextBox1”的线程访问它。那么我们继续改造代码,让数字显示在richTe
4、xtBox1控件上,并且让richTextBox1焦点处于最低端。复制代码代码如下:privatevoidbutton1_Click(objectsender,EventArgse){//创建一个BackgroundWorker线程BackgroundWorkerbw=newBackgroundWorker();//创建一个DoWork事件,指定bw_DoWork方法去做事bw.DoWork+=newDoWorkEventHandler(bw_DoWork);//开始执行bw.RunWorkerAsync
5、();}voidbw_DoWork(objectsender,DoWorkEventArgse){for(inti=0;i<1000;i++){this.Invoke((MethodInvoker)delegate{this.richTextBox1.Text+=i+Environment.NewLine;});}}privatevoidrichTextBox1_TextChanged(objectsender,EventArgse){RichTextBoxtextbox=(RichTextBox)sen
6、der;textbox.SelectionStart=textbox.Text.Length;textbox.ScrollToCaret();}上面是BackgroundWorker一个最简单的例子,没有多余复杂的代码,这就是BackgroundWorker,下面我们加入停止按钮,让线程停下来。再拖动一个button控件到界面,让线程停止我们先要改造一下代码,让button事件也能控制到BackgroundWorker线程。复制代码代码如下:BackgroundWorkerbw=null;privatev
7、oidbutton1_Click(objectsender,EventArgse){//创建一个BackgroundWorker线程bw=newBackgroundWorker();//指定可以让线程停止bw.WorkerSupportsCancellation=true;//创建一个DoWork事件,指定bw_DoWork方法去做事bw.DoWork+=newDoWorkEventHandler(bw_DoWork);//开始执行bw.RunWorkerAsync();}privatevoidbutto
8、n2_Click(objectsender,EventArgse){//停止线程bw.CancelAsync();}voidbw_DoWork(objectsender,DoWorkEventArgse){for(inti=0;i<1000;i++){//获取当前线程是否得到停止的指令if(bw.CancellationPending){e.Cancel=true;return;}this.Invoke((MethodInvo
此文档下载收益归作者所有