怎么在c#中使用BackgroundWorker处理任务

  介绍

这篇文章给大家介绍怎么在c#中使用BackgroundWorker处理任务,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

<>强采集的数据处理

例如是我采集数据的一个局部界面,主要是根据一些参数进行数据的采集,采集过程可以通过状态栏和右边的标签进行反馈,在状态栏显示采集进度等信息,实现比较友好的信息显示。

怎么在c#中使用BackgroundWorker处理任务

一般我们定义后台线程处理,可以在该窗体定义一个变量即可,如下代码所示。

private  BackgroundWorker  worker =, new  BackgroundWorker ();

然后就是对这个后台线程处理对象的一些事件进行实现即可,如下代码所示

public  partial  class  MainFrame :标识   {才能   ,,,///,& lt; summary>   ,,,///,增加一个变量来记录线程状态   ,,,///,& lt;/summary>   ,,,private  bool  IsThreadRunning =,假;   ,,,private  BackgroundWorker  worker =, new  BackgroundWorker ();      ,,,public 大型机()   ,,,{   ,,,,,InitializeComponent ();      ,,,,,Portal.gc.InitData ();      ,,,,,worker.WorkerSupportsCancellation =,真的,,,//支持取消   ,,,,,worker.WorkerReportsProgress =,真的,,,,,//支持报告进度   ,,,,,worker.DoWork  +=, worker_DoWork;,,,,,,,//处理过程   ,,,,,worker.RunWorkerCompleted  +=, worker_RunWorkerCompleted;,//完成操作   ,,,,,worker.ProgressChanged  +=, worker_ProgressChanged;,,,,//报告进度   ,,,}

例如进度条的通知,主要就是计算总任务的数量,以及当前完成的人数数量,我们实现代码如下所示

///, & lt; summary>   ,,,///,进度条的通知   ,,,///,& lt;/summary>   ,,,void  worker_ProgressChanged (object ,发送方,ProgressChangedEventArgs  e)   ,,,{   ,,,,,this.barProgress.EditValue =, e.ProgressPercentage;   ,,,,,CollectStateInfo  stateInfo =, e.UserState  as  CollectStateInfo;   ,,,,,if  (stateInfo  !=, null)   ,,,,,{   ,,,,,,,var  message =, string.Format(“正在采集,{0},的,{1},,,项目名称为:{2},,,stateInfo.TotalRecords,, stateInfo.CompletedRecord  +, 1, stateInfo.CurrentItemName);   ,,,,,,,this.lblTips.Text =,消息;   ,,,,,,,this.barTips.Caption =,消息;      ,,,,,,,//记录运行位置   ,,,,,,,JobParameterHelper.SaveData (new  CurrentJobParameter (stateInfo));   ,,,,,}   ,,,}

这里我们看到了,这个里面使用了一个自定义的状态参数CollectStateInfo,这个是我们用来在后台进程处理过程中传递的一个对象,可以记录当前采集的相关信息,CollectStateInfo类的定义如下所示。

///, & lt; summary>///才能,状态对象数据///才能,& lt;/summary>   public 才能;class  CollectStateInfo   {才能   ,,,///,& lt; summary>   ,,,///,当前期数(年份+期数)   ,,,///,& lt;/summary>   ,,,public  string  YearQSNumber {组,得到,,,}      ,,,///,& lt; summary>   ,,,///,任务开始时间   ,,,///,& lt;/summary>   ,,,public  DateTime  StartTime {组,得到,,,}      ,,,private  DateTime  m_EndTime =, DateTime.Now;      ,,,///,& lt; summary>   ,,,///,任务开始时间   ,,,///,& lt;/summary>   ,,,public  DateTime  EndTime   ,,,{   ,,,,,   ,,,,,{   ,,,,,,,return  m_EndTime;   ,,,,,}   ,,,,,   ,,,,,{   ,,,,,,,//设置结束时间的时候,获取耗时   ,,,,,,,=,m_EndTime 价值;   ,,,,,,,this.TimeSpanUsed =, value.Subtract (this.StartTime);   ,,,,,}   ,,,}      ,,,///,& lt; summary>   ,,,///,任务用时   ,,,///,& lt;/summary>   ,,,public  TimeSpan  TimeSpanUsed {组,得到,,,}      null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null

怎么在c#中使用BackgroundWorker处理任务