基本的 Backgroundworker





2.00/5 (4投票s)
演示如何使用 backgroundworker。
引言
有时你只需要一个简单的后台线程来执行工作,并在完成时处理结果。 Microsoft 提供了一个 BackgroundWorker 组件,它在 Windows Form 上就像一个线程一样工作。我想演示如何使用 BackgroundWorker
组件。
背景
BackgroundWorker
有三个事件
DoWork
- 当调用backgroundworker
运行时,此方法将处理工作。ProgressChanged
- 用于向进度条报告进度。RunWorkerCompleted
- 将DoWork
的返回结果的代码放在这里。
Using the Code
设置窗体。


这里我有
- 2 个
TextBox
- 1 个
Label
- 1 个
Button
- 1 个进度条
- 1 个
backgroundWorker
(在工具箱的“组件”部分下)
backgroundworker
属性 WorkerReportProgress
需要设置为 true
才能报告进度

backgroundworker
组件如何运行?
private void btnCalculate_Click(object sender, EventArgs e)
{
MyStruct myStruct = new MyStruct(int.Parse(txtX.Text),int.Parse(txtY.Text));
backgroundWorker1.RunWorkerAsync(myStruct);
btnCalculate.Enabled = false;
}
当按下“计算”按钮时,它将调用 backgroundworker.RunWorkerAsync(object)
。 RunWorkerAsync
将触发事件 _DoWork
。
在 backgroundWorker1_DoWork
事件中,你将放置执行某些操作的代码。
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
// Get the Object passed in
MyStruct my = (MyStruct)e.Argument;
// Do some work
for (int i = 0; i <= 10; i++)
{
backgroundWorker1.ReportProgress(i);
Thread.Sleep(100);
}
// return the result
e.Result = my.X + my.Y;
}
e.Argument
很重要,因为这是我们将取消包装传递到 backgroundworker
组件的对象的方式。
在这个例子中,将只是休眠并报告进度。 在一段时间后,它将计算结果并将其返回到 backgrroundWorker1_RunWorkerCompleted
。
当 backgroundworker
报告进度时,它将更新 _ProgressChanged
。
private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
progressBar1.Value = e.ProgressPercentage;
}
最后,当它完成时,它将返回结果,我们希望显示结果,因此我们将代码放在 _RunWorkerCompleted
中。
private void backgroundWorker1_RunWorkerCompleted
(object sender, RunWorkerCompletedEventArgs e)
{
lblAnswer.Text = e.Result.ToString();
btnCalculate.Enabled = true;
}
历史
- 2010 年 2 月 11 日:初始发布