当前位置:首页 > 开发 > C# > 正文内容

C# BackgroundWorker

C#5个月前 (12-20)

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事件处理程序中处理任务完成后的情况,包括显示结果、处理错误等。


转载请注明出处。

本文链接:http://www.pythonopen.com/?id=1620

相关文章

C# Winform 禁止控件因方向键切换焦点

protected override bool ProcessCmdK...

C# Winform 拖放文件

private void Form1_Load(object send...

C# Browsable(bool)

在编程中(比如常见的 C# 语言在开发 Windows Forms 等应用程序时),Browsabl...

C# decimal

概述在 C# 中,decimal是一种数据类型,用于表示高精度的十进制数值。它主要用于需要精确计算的...

C# Control防闪烁

SetStyle(ControlStyles.AllPaintingInWmPaint |...

C# Graphics文本抗锯齿

g.TextRenderingHint = TextRenderingHint....