public partial class MainFrame : BaseForm
{
/// <summary>
/// 增加一个变量来记录线程状态
/// </summary>
private bool IsThreadRunning = false;
private BackgroundWorker worker = new BackgroundWorker();
public MainFrame()
{
InitializeComponent();
Portal.gc.InitData();
worker.WorkerSupportsCancellation = true; //支持取消
worker.WorkerReportsProgress = true; //支持报告进度
worker.DoWork += worker_DoWork; //处理过程
worker.RunWorkerCompleted += worker_RunWorkerCompleted; //完成操作
worker.ProgressChanged += worker_ProgressChanged; //报告进度
}
例如进度条的通知,主要就是计算总任务的数量,以及当前完成的人数数量,我们实现代码如下所示
/// <summary>
/// 进度条的通知
/// </summary>
void worker_ProgressChanged(object sender, 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 = message;
this.barTips.Caption = message;
//记录运行位置
JobParameterHelper.SaveData(new CurrentJobParameter(stateInfo));
}
}
这里我们看到了,这个里面使用了一个自定义的状态参数CollectStateInfo ,这个是我们用来在后台进程处理过程中传递的一个对象,可以记录当前采集的相关信息,CollectStateInfo 类的定义如下所示。
/// <summary>
/// 状态对象数据
/// </summary>
public class CollectStateInfo
{
/// <summary>
/// 当前期数(年份+期数)
/// </summary>
public string YearQSNumber { get; set; }
/// <summary>
/// 任务开始时间
/// </summary>
public DateTime StartTime { get; set; }
private DateTime m_EndTime = DateTime.Now;
/// <summary>
/// 任务开始时间
/// </summary>
public DateTime EndTime
{
get
{
return m_EndTime;
}
set
{
//设置结束时间的时候,获取耗时
m_EndTime = value;
this.TimeSpanUsed = value.Subtract(this.StartTime);
}
}
/// <summary>
/// 任务用时
/// </summary>
public TimeSpan TimeSpanUsed { get; set; }
/// <summary>
/// 任务数量
/// </summary>
public int TotalRecords { get; set; }
private int m_CompletedRecord = 0;
/// <summary>
/// 完成数量
/// </summary>
public int CompletedRecord
{
get
{
return m_CompletedRecord;
}
set
{
m_CompletedRecord = value;
if (TotalRecords > 0)
{
this.CurrentProgress = Convert.ToInt32(value * 100.0 / TotalRecords);
}
}
}
/// <summary>
/// 当前进度
/// </summary>
public int CurrentProgress { get; set; }
/// <summary>
/// 当前采集的项目
/// </summary>
public string CurrentItemName { get; set; }
/// <summary>
/// 默认构造函数
/// </summary>
/// <param name="total"></param>
public CollectStateInfo()
{
this.StartTime = DateTime.Now;
this.EndTime = DateTime.Now;
}
/// <summary>
/// 构造函数
/// </summary>
/// <param name="total">任务数量</param>
/// <param name="qsNumber">采集当前期数</param>
public CollectStateInfo(int total, string qsNumber, int completed) :this()
{
this.TotalRecords = total;
this.YearQSNumber = qsNumber;
this.CompletedRecord = completed;
}
}










