C# BackgroundWorker 后台任务

发布时间:2024年01月16日

1. BackgroundWorker 后台任务

????????C# BackgroundWorker是一个用于在后台执行耗时操作的组件。它可以在Windows窗体应用程序中使用,通过在BackgroundWorker实例上注册事件处理程序来执行耗时的运算。

// 创建BackgroundWorker对象
BackgroundWorker backgroundWorker1 = new BackgroundWorker();

// 设置支持报告进度和取消操作
backgroundWorker1.WorkerReportsProgress = true;      // 是否支持报告进度     
backgroundWorker1.WorkerSupportsCancellation = true; // 是否支持取消操作    

// 注册DoWork事件,该事件中执行后台任务
backgroundWorker1.DoWork += new DoWorkEventHandler(backgroundWorker1_DoWork);

// 注册ProgressChanged事件,该事件中更新进度
backgroundWorker1.ProgressChanged += new ProgressChangedEventHandler(backgroundWorker1_ProgressChanged);

// 注册RunWorkerCompleted事件,该事件中处理任务完成后的操作
backgroundWorker1.RunWorkerCompleted += new RunWorkerCompletedEventHandler(backgroundWorker1_RunWorkerCompleted);

// 启动后台任务
backgroundWorker1.RunWorkerAsync(50);

// 取消后台任务
backgroundWorker1.CancelAsync();

// 后台任务执行方法
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
    BackgroundWorker bw = sender as BackgroundWorker;
    for (int i = 0; i <= 100; i++)
    {
        if (bw.CancellationPending)
        {
            // 用户取消了操作
            e.Cancel = true;
            return;
        }
        // 报告进度
        bw.ReportProgress(i, $"已经完成{i}%");
        Thread.Sleep(Convert.ToInt32(e.Argument));
    }
    e.Result = "完成";
}

// 进度更新方法
private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
    // 更新进度
    Console.WriteLine(e.UserState.ToString());
}

// 任务完成方法
private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
    if (e.Cancelled)
    {
        // 任务被取消
        Console.WriteLine("任务被取消");
    }
    else if (e.Error != null)
    {
        // 任务发生错误
        Console.WriteLine("任务发生错误");
    }
    else
    {
        // 任务完成
        Console.WriteLine("任务完成");
    }
}

2. C# BackgroundWorker的各个成员参数的意思和注释

1. DoWork事件:
   - 参数:sender - DoWorkEventArgs对象,包含事件的相关信息。
   - 作用:在此事件中执行后台任务的代码。

2. RunWorkerCompleted事件:
   - 参数:sender - 事件的发送者,即BackgroundWorker对象本身。
   - 参数:e - RunWorkerCompletedEventArgs对象,包含事件的相关信息。
   - 作用:在此事件中处理后台任务完成后的代码。

3. ProgressChanged事件:
   - 参数:sender - 事件的发送者,即BackgroundWorker对象本身。
   - 参数:e - ProgressChangedEventArgs对象,包含事件的相关信息。
   - 作用:在此事件中处理后台任务进度的更新。

4. WorkerReportsProgress属性:
   - 类型:bool
   - 默认值:false
   - 作用:指示BackgroundWorker是否支持报告进度。

5. WorkerSupportsCancellation属性:
   - 类型:bool
   - 默认值:false
   - 作用:指示BackgroundWorker是否支持取消操作。

6. RunWorkerAsync方法:
   - 参数:argument - 传递给DoWork事件的参数。
   - 作用:开始执行后台任务。

7. CancelAsync方法:
   - 作用:取消后台任务的执行。

8. CancellationPending属性:
   - 类型:bool
   - 默认值:false
   - 作用:指示是否已请求取消后台任务的执行。

9. ReportProgress方法:
   - 参数:percentProgress - 表示任务进度的百分比。
   - 参数:userState - 传递给ProgressChanged事件的参数。
   - 作用:报告后台任务的进度。

请注意,以上是BackgroundWorker的常用成员参数的意思和注释。具体使用时,
可以根据实际需求来选择使用哪些成员参数。

文章来源:https://blog.csdn.net/yutian0606/article/details/135634415
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。