前言:
該示例適用於任務執行時返回進度。
示例
示例 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();
}