前言:
该示例适用于任务执行时返回进度。
示例
示例 UI 基本为如下图
示例代码如下
private BackgroundWorker _bw;
/// <summary>
/// 开始按钮
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void StartButton_Click(object sender, EventArgs e)
{
StartButton.Enabled = false;
_bw = new BackgroundWorker();
// 可以异步取消
_bw.WorkerSupportsCancellation = true;
// 可以报告进度
_bw.WorkerReportsProgress = true;
_bw.DoWork += (_, args) =>
{
// 任务内容
for (int i = 1; i <= 100; i++)
{
if (_bw.CancellationPending)
break;
_bw.ReportProgress(i, i.ToString());
Thread.Sleep(200);
}
};
_bw.ProgressChanged += (obj, agrs) =>
{
// 报告进度
ProgressBar.Text = agrs.UserState.ToString();
};
_bw.RunWorkerCompleted += (_, agrs) =>
{
// 任务完成
StartButton.Enabled = true;
ProgressBar.Text += " 完成";
};
_bw.RunWorkerAsync();
}
/// <summary>
/// 停止按钮
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void StopButton_Click(object sender, EventArgs e)
{
if (_bw != null)
_bw.CancelAsync();
}