C# BackgroundWorker
1.概述
BackgroundWorker是一个在 WinForms 应用程序中用于简化在后台线程执行长时间运行任务的组件。它提供了一种方便的方式来实现多线程编程,同时能够安全地更新用户界面。
2.主要成员和事件
DoWork 事件
功能:这是在后台线程中执行实际任务的地方。当调用BackgroundWorker的RunWorkerAsync()方法时,DoWork事件被触发,在这个事件处理程序中编写长时间运行的任务代码,例如文件下载、数据处理等复杂操作。
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
// 模拟一个长时间运行的任务,这里是计算1到100的整数和
int sum = 0;
for (int i = 1; i <= 100; i++)
{
sum += i;
}
// 将计算结果存储在DoWorkEventArgs的Result属性中,以便在任务完成后获取
e.Result = sum;
}ProgressChanged 事件
功能:用于在后台任务执行过程中向用户界面报告进度。通过在后台线程中调用BackgroundWorker的ReportProgress()方法来触发此事件。这使得可以在 UI 线程上更新进度条、状态标签等 UI 元素,以向用户展示任务的进展情况。
private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
// 更新进度条的值
progressBar1.Value = e.ProgressPercentage;
}RunWorkerCompleted 事件
功能:在后台任务完成(无论是正常完成、被取消还是发生错误)后触发。在这个事件处理程序中,可以访问DoWork事件中设置的Result属性来获取任务的最终结果,并且可以对任务完成后的 UI 更新进行操作,如显示结果、隐藏进度条等。
private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
if (e.Error == null)
{
// 如果没有错误,显示任务结果
textBox1.Text = e.Result.ToString();
}
else
{
// 如果有错误,显示错误信息
MessageBox.Show("任务出错:" + e.Error.Message);
}
}3.使用步骤
声明和初始化:在 Windows Forms 应用程序的表单类中声明一个BackgroundWorker对象,并在表单的构造函数或Load事件中对其进行初始化,同时关联DoWork、ProgressChanged和RunWorkerCompleted事件的处理函数。
启动任务:通过调用BackgroundWorker的RunWorkerAsync()方法来启动后台任务。可以在按钮点击事件或其他合适的事件处理程序中执行此操作。
报告进度(可选):如果任务有可量化的进度,可以在DoWork事件处理程序中调用ReportProgress()方法来触发ProgressChanged事件,以更新 UI 中的进度显示。
处理完成:在RunWorkerCompleted事件处理程序中处理任务完成后的情况,包括显示结果、处理错误等。
转载请注明出处。