源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

C# BackgroundWorker组件学习入门介绍

  • 时间:2020-05-18 03:24 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:C# BackgroundWorker组件学习入门介绍
一个程序中需要进行大量的运算,并且需要在运算过程中支持用户一定的交互,为了获得更好的用户体验,使用BackgroundWorker来完成这一功能.      BackgroundWorker类允许您在单独的专用线程上运行操作。  耗时的操作(如下载和数据库事务)在长时间运行时可能会导致用户界面 (UI) 似乎处于停止响应状态。   如果您需要能进行响应的用户界面,而且面临与这类操作相关的长时间延迟,则可以使用 BackgroundWorker类方便地解决问题(MSDN)。         若要在后台执行耗时的操作,请创建一个 BackgroundWorker,侦听那些报告操作进度并在操作完成时发出信号的事件。  可以通过编程方式创建 BackgroundWorker,   也可以将它从“工具箱”的“组件”选项卡中拖到窗体上。  如果在 Windows 窗体设计器中创建 BackgroundWorker,则它会出现在组件栏中,而且它的属性会显示在“属性”窗口中(MSDN)。 属性:    IsBusy:获取一个值,指示 BackgroundWorker 是否正在运行异步操作。    WorkerReportsProgress:获取或设置一个值,该值指示 BackgroundWorker 能否报告进度更新。    WorkerSupportsCancellation:获取或设置一个值,该值指示 BackgroundWorker 是否支持异步取消。 事件: DoWork:调用 RunWorkerAsync 时发生。 ProgressChanged:调用 ReportProgress 时发生。 RunWorkerCompleted:当后台操作已完成、被取消或引发异常时发生。 实例:  窗体设计如下图: [img]http://files.jb51.net/file_images/article/201310/201310091618332.jpg[/img] 代码实现:
[u]复制代码[/u] 代码如下:
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace WindowsFormsApplication2 {     public partial class Form1 : Form     {         public Form1()         {             InitializeComponent();             backgroundWorker1.WorkerReportsProgress = true;             backgroundWorker1.WorkerSupportsCancellation = true;         }         private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)         {             BackgroundWorker worker = sender as BackgroundWorker;             for (int i = 1; i <= 12; i++)             {                 if (worker.CancellationPending == true)                 {                     e.Cancel = true;                     break;                 }                 else                 {                     System.Threading.Thread.Sleep(500);                     worker.ReportProgress(i * 10);                 }             }         }         private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)         {             lbResult.Text = (e.ProgressPercentage.ToString() + "%"+e.UserState);         }         private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)         {             if (e.Cancelled == true)             {                 lbResult.Text = "Canceled!";             }             else if (e.Error != null)             {                 lbResult.Text = "Error: " + e.Error.Message;             }             else             {                 lbResult.Text = "Done!";             }         }         private void btnStartAsync_Click(object sender, EventArgs e)         {             if (backgroundWorker1.IsBusy != true)             {                 backgroundWorker1.RunWorkerAsync();             }         }         private void btnCancelAsync_Click(object sender, EventArgs e)         {             if (backgroundWorker1.WorkerSupportsCancellation == true)             {                 backgroundWorker1.CancelAsync();             }         }     } }
运行结果: [img]http://files.jb51.net/file_images/article/201310/201310091618333.jpg[/img] [img]http://files.jb51.net/file_images/article/201310/201310091618334.jpg[/img] [img]http://files.jb51.net/file_images/article/201310/201310091618335.jpg[/img]
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部