C# (VS2019 Frameworks) 背景程序组件BackgroundWorker 的基本和使用

来源:互联网 时间:2025-11-07 17:36:21 浏览量:1

前言:

C#的应用软件中,经常要考虑到UI的相应和处理的程序(尤其占用时间很长的程序)之前的相应配合问题。

传统的思路,用线程的控制方法,加原子锁等方法,可是,再怎么搞都没有 windows C#自带的 BackgroundWorker 的方法更高效和稳定。

因为,`BackgroundWorker` 组件是实现异步编程的一种方式,它允许开发者在不阻塞主线程的情况下执行耗时操作,并通过事件与主线程安全地交互。
这个是windows内部,基于操作系统的工具。

在下面的参考代码里面,我们做了一个简单的带进度条的后台进程程序。


BackgroundWorker 的基本概念:

在C#中,BackgroundWorker 是一个组件,用于在后台线程中执行长时间运行的任务,而不会影响用户界面的响应性。BackgroundWorker 允许你在后台线程中执行操作,同时可以安全地与主线程(通常是UI线程)通信。

1.2 属性和方法:

 属性:

- `CancellationPending`: 一个只读属性,用于指示是否已经请求取消后台操作。如果用户请求取消操作,此属性将返回 `true`。

- `IsBusy`: 指示 `BackgroundWorker` 是否正在执行操作。

- `WorkerReportsProgress`: 用于标识,你是设置或获取 `BackgroundWorker` 报告进度更改。

- `WorkerSupportsCancellation`: 用于设置或获取 `BackgroundWorker` 是否支持取消操作。

事件:

- `DoWork`: 当 `RunWorkerAsync` 方法被调用时,此事件被触发。通常在此事件的处理程序中执行后台任务。

- `ProgressChanged`: 当 `ReportProgress` 方法被调用时,此事件被触发。可以在事件处理程序中更新用户界面以反映进度。

- `RunWorkerCompleted`: 当后台操作完成时,无论是正常完成、被取消还是发生错误,此事件都会被触发。

方法:(public)

- `CancelAsync`: 请求取消后台操作。如`WorkerSupportsCancellation` 属性设置为 `true`,此方法将触发 `CancellationPending` 属性变为 `true`。

- `ReportProgress`: 报告后台操作的进度。如 `WorkerReportsProgress` 属性设置为 `true`,可以使用此方法来更新进度指示器或执行其他与进度相关的操作。

- `RunWorkerAsync`: 启动后台操作

- `RunWorkerAsync (object argument)`: 带有参数的 `RunWorkerAsync` 方法。

受保护的虚方法:(只能在本背景类里面被调用,且可以重写和拓展)(protected)

- `OnDoWork(DoWorkEventArgs e)`: 当 `DoWork` 事件被触发时,此方法被调用。通常在此方法中实现后台任务的逻辑。

- `OnProgressChanged(ProgressChangedEventArgs e)`: 当 `ProgressChanged` 事件被触发时,此方法被调用。可以在此处更新进度信息。

- `OnRunWorkerCompleted(RunWorkerCompletedEventArgs e)`: 当 `RunWorkerCompleted` 事件被触发时,此方法被调用。可以在此处处理后台操作完成后的清理工作或结果。

 BackgroundWorker 具有的属性和方法如上,大多数是字面意思,我们读的懂,就可以用,我后面列举两个例子:


2 构建 BackgroundWorker 的方法:

2.1 加载

这行代码的目的是将事件的 sender 参数转换为 BackgroundWorker 类型,以便使用 BackgroundWorker 类的成员。如果转换成功,worker 将是一个指向原始 BackgroundWorker 实例的引用

string filePath = e.Argument as string; // 从参数中获取文件路径

4.3 后***成

private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) {     if (e.Cancelled)     {         MessageBox.Show("操作已取消。");     }     else if (e.Error != null)     {         MessageBox.Show("发生错误: " + e.Error.Message);     }     else     {         // 使用 DoWork 事件处理器的结果         MessageBox.Show("操作结果: " + e.Result);     } }

5 运行结果展示:

我在Form的底部加了一个进度条,然后,运行后台模拟进度后,显示如下:

Copyright © 转乾企业管理-加盟网 版权所有 | 黔ICP备2023009682号-14

免责声明:本站内容仅用于学习参考,信息和图片素材来源于互联网,如内容侵权与违规,请联系我们进行删除,我们将在三个工作日内处理。联系邮箱:303555158#QQ.COM (把#换成@)