Laravel  
laravel
文档
数据库
架构
入门
php技术
    
Laravelphp
laravel / php / java / vue / mysql / linux / python / javascript / html / css / c++ / c#

c# backgroundworker

作者:穹上之月   发布日期:2026-02-23   浏览:14

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();
        }
    }
}

解释说明

  1. 初始化 BackgroundWorker:

    • 创建一个 BackgroundWorker 实例,并设置 WorkerReportsProgressWorkerSupportsCancellation 属性为 true,以便支持进度报告和取消操作。
  2. 绑定事件处理程序:

    • 使用 += 运算符将事件处理方法绑定到 DoWork, ProgressChangedRunWorkerCompleted 事件。
  3. 启动异步操作:

    • StartAsyncOperation 方法检查 BackgroundWorker 是否忙碌。如果不忙碌,则调用 RunWorkerAsync 方法启动异步操作。
  4. 执行后台工作:

    • BackgroundWorker_DoWork 方法是后台工作的核心逻辑。它模拟了一个循环任务,并在每次迭代中报告进度。如果检测到取消请求 (CancellationPending),则取消任务。
  5. 更新进度:

    • BackgroundWorker_ProgressChanged 方法用于处理进度变化事件,可以在此处更新 UI 或进行其他相关操作。
  6. 完成或取消任务:

    • BackgroundWorker_RunWorkerCompleted 方法在任务完成后触发。根据任务的状态(是否被取消或是否有错误),输出相应的消息。
  7. 取消异步操作:

    • CancelAsyncOperation 方法用于请求取消正在进行的异步操作。

上一篇:c#split

下一篇:c# string 转int

大家都在看

c# 二进制

c# 创建目录

c# datatable group by

c# tcp client

c# type.gettype

c# sqlconnection

c# string.format 小数位数

.net和c#

c#获取系统时间

c#游戏开发

Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3

Laravel 中文站