using System;
using System.ComponentModel;
using System.Threading;
public class BackgroundWorkerExample
{
private BackgroundWorker backgroundWorker;
public BackgroundWorkerExample()
{
// 初始化 BackgroundWorker
backgroundWorker = new BackgroundWorker();
backgroundWorker.WorkerReportsProgress = true;
backgroundWorker.WorkerSupportsCancellation = true;
// 绑定事件处理程序
backgroundWorker.DoWork += BackgroundWorker_DoWork;
backgroundWorker.ProgressChanged += BackgroundWorker_ProgressChanged;
backgroundWorker.RunWorkerCompleted += BackgroundWorker_RunWorkerCompleted;
}
public void StartAsyncOperation()
{
if (!backgroundWorker.IsBusy)
{
backgroundWorker.RunWorkerAsync();
}
}
private void BackgroundWorker_DoWork(object sender, DoWorkEventArgs e)
{
BackgroundWorker worker = sender as BackgroundWorker;
for (int i = 1; i <= 100; i++)
{
if (worker.CancellationPending == true)
{
e.Cancel = true;
return;
}
else
{
// 模拟一些工作
Thread.Sleep(100);
worker.ReportProgress(i);
}
}
}
private void BackgroundWorker_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
// 更新 UI 或其他操作
Console.WriteLine($"进度: {e.ProgressPercentage}%");
}
private void BackgroundWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
if (e.Cancelled == true)
{
Console.WriteLine("任务已取消");
}
else if (e.Error != null)
{
Console.WriteLine($"发生错误: {e.Error.Message}");
}
else
{
Console.WriteLine("任务已完成");
}
}
public void CancelAsyncOperation()
{
if (backgroundWorker.IsBusy)
{
backgroundWorker.CancelAsync();
}
}
}
初始化 BackgroundWorker:
BackgroundWorker 实例,并设置 WorkerReportsProgress 和 WorkerSupportsCancellation 属性为 true,以便支持进度报告和取消操作。绑定事件处理程序:
+= 运算符将事件处理方法绑定到 DoWork, ProgressChanged 和 RunWorkerCompleted 事件。启动异步操作:
StartAsyncOperation 方法检查 BackgroundWorker 是否忙碌。如果不忙碌,则调用 RunWorkerAsync 方法启动异步操作。执行后台工作:
BackgroundWorker_DoWork 方法是后台工作的核心逻辑。它模拟了一个循环任务,并在每次迭代中报告进度。如果检测到取消请求 (CancellationPending),则取消任务。更新进度:
BackgroundWorker_ProgressChanged 方法用于处理进度变化事件,可以在此处更新 UI 或进行其他相关操作。完成或取消任务:
BackgroundWorker_RunWorkerCompleted 方法在任务完成后触发。根据任务的状态(是否被取消或是否有错误),输出相应的消息。取消异步操作:
CancelAsyncOperation 方法用于请求取消正在进行的异步操作。上一篇:c#split
下一篇:c# string 转int
Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3
Laravel 中文站