C#中Backgroundworker类详解

有时候,你可能需要另建一个线程,在后台持续运行以完成某项任务,并不时地与主线程通信。Backgroundworker就是为此而生的。

 一.属性

1.BackgroundWorker.CancellationPending 属性

获取一个值,指示应用程序是否已请求取消后台操作。

public bool CancellationPending { get; }

如果应用程序已请求取消后台操作,则为 true;否则为 false。 默认值为 false。 

 2.BackgroundWorker.IsBusy 属性

获取一个值,指示 BackgroundWorker 是否正在运行异步操作。

public bool IsBusy { get; }

 如果 BackgroundWorker 正在运行异步操作,则为 true;否则为 false

3.BackgroundWorker.WorkerReportsProgress 属性

获取或设置一个值,该值指示 BackgroundWorker 能否报告进度更新。

public bool WorkerReportsProgress { get; set; }

如果 BackgroundWorker 支持进度更新,则为 true;否则为 false。 默认值为 false

4.BackgroundWorker.WorkerSupportsCancellation 属性

取或设置一个值,该值指示 BackgroundWorker 是否支持异步取消。

public bool WorkerSupportsCancellation { get; set; }

 如果 BackgroundWorker 支持取消,则为 true;否则为 false。 默认值为 false

二.方法

1.BackgroundWorker.CancelAsync 方法

请求取消挂起的后台操作。

public void CancelAsync ();

2.BackgroundWorker.OnDoWork(DoWorkEventArgs) 方法

引发 DoWork 事件。

protected virtual void OnDoWork (System.ComponentModel.DoWorkEventArgs e);

3.BackgroundWorker.OnProgressChanged(ProgressChangedEventArgs) 方法

引发 ProgressChanged 事件。

protected virtual void OnProgressChanged (System.ComponentModel.ProgressChangedEventArgs e);

4.BackgroundWorker.OnRunWorkerCompleted(RunWorkerCompletedEventArgs) 方法

引发 RunWorkerCompleted 事件。

protected virtual void OnRunWorkerCompleted (System.ComponentModel.RunWorkerCompletedEventArgs e);

 5.BackgroundWorker.ReportProgress 方法

引发 ProgressChanged 事件。

public void ReportProgress (int percentProgress);

6.BackgroundWorker.RunWorkerAsync 方法

开始执行后台操作。

public void RunWorkerAsync ();

三.事件

1.BackgroundWorker.DoWork 事件

调用 RunWorkerAsync() 时发生。

public event System.ComponentModel.DoWorkEventHandler? DoWork;

示例:

下面的代码示例演示如何使用 DoWork 事件启动异步操作。 此代码示例是为 BackgroundWorker 类提供的一个更大示例的一部分。

// This event handler is where the actual,
// potentially time-consuming work is done.
private void backgroundWorker1_DoWork(object sender, 
    DoWorkEventArgs e)
{   
    // Get the BackgroundWorker that raised this event.
    BackgroundWorker worker = sender as BackgroundWorker;

    // Assign the result of the computation
    // to the Result property of the DoWorkEventArgs
    // object. This is will be available to the 
    // RunWorkerCompleted eventhandler.
    e.Result = ComputeFibonacci((int)e.Argument, worker, e);
}

2.BackgroundWorker.ProgressChanged 事件

调用 ReportProgress(Int32) 时发生。

public event System.ComponentModel.ProgressChangedEventHandler? ProgressChanged;

 示例:

下面的代码示例演示如何使用 ProgressChanged 事件向用户报告异步操作的进度。 此代码示例是为 BackgroundWorker 类提供的一个更大示例的一部分。

// This event handler updates the progress bar.
private void backgroundWorker1_ProgressChanged(object sender,
    ProgressChangedEventArgs e)
{
    this.progressBar1.Value = e.ProgressPercentage;
}

3.BackgroundWorker.RunWorkerCompleted 事件

当后台操作已完成、被取消或引发异常时发生。

public event System.ComponentModel.RunWorkerCompletedEventHandler? RunWorkerCompleted;

示例:

下面的代码示例演示如何使用 RunWorkerCompleted 事件来处理异步操作的结果。 此代码示例是为 BackgroundWorker 类提供的一个更大示例的一部分。

// This event handler deals with the results of the
// background operation.
private void backgroundWorker1_RunWorkerCompleted(
    object sender, RunWorkerCompletedEventArgs e)
{
    // First, handle the case where an exception was thrown.
    if (e.Error != null)
    {
        MessageBox.Show(e.Error.Message);
    }
    else if (e.Cancelled)
    {
        // Next, handle the case where the user canceled 
        // the operation.
        // Note that due to a race condition in 
        // the DoWork event handler, the Cancelled
        // flag may not have been set, even though
        // CancelAsync was called.
        resultLabel.Text = "Canceled";
    }
    else
    {
        // Finally, handle the case where the operation 
        // succeeded.
        resultLabel.Text = e.Result.ToString();
    }

    // Enable the UpDown control.
    this.numericUpDown1.Enabled = true;

    // Enable the Start button.
    startAsyncButton.Enabled = true;

    // Disable the Cancel button.
    cancelAsyncButton.Enabled = false;
}

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SamaHddd

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值