C# BackgroundWorker 控件使用

C# BackgroundWorker 控件使用

ID:37914218

大小:53.50 KB

页数:11页

时间:2019-06-02

C# BackgroundWorker 控件使用_第1页
C# BackgroundWorker 控件使用_第2页
C# BackgroundWorker 控件使用_第3页
C# BackgroundWorker 控件使用_第4页
C# BackgroundWorker 控件使用_第5页
资源描述:

《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

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。