BACKGROUNDWORKER怎么开启多线程
时间: 2023-08-29 18:12:39 浏览: 120
在使用BackgroundWorker开启多线程时,需要先创建一个BackgroundWorker对象,然后设置DoWork事件处理程序。接着在主线程中调用BackgroundWorker的RunWorkerAsync方法,该方法将启动一个新线程并执行DoWork事件处理程序。可以通过设置BackgroundWorker的WorkerReportsProgress和WorkerSupportsCancellation属性,使其支持进度报告和取消操作。
以下是一个简单的示例代码,演示如何使用BackgroundWorker开启多线程:
```c#
private BackgroundWorker worker;
private void buttonStart_Click(object sender, EventArgs e)
{
// 创建BackgroundWorker对象
worker = new BackgroundWorker();
// 设置DoWork事件处理程序
worker.DoWork += new DoWorkEventHandler(worker_DoWork);
// 设置支持进度报告和取消操作
worker.WorkerReportsProgress = true;
worker.WorkerSupportsCancellation = true;
// 启动新线程
worker.RunWorkerAsync();
}
private void worker_DoWork(object sender, DoWorkEventArgs e)
{
// 执行耗时操作
for (int i = 1; i <= 100; i++)
{
// 发送进度报告
worker.ReportProgress(i);
// 检查是否取消操作
if (worker.CancellationPending)
{
e.Cancel = true;
return;
}
// 模拟耗时操作
Thread.Sleep(50);
}
}
private void worker_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
// 更新进度条
progressBar1.Value = e.ProgressPercentage;
}
private void worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
// 检查是否取消操作
if (e.Cancelled)
{
MessageBox.Show("操作已取消");
}
else if (e.Error != null)
{
MessageBox.Show("发生错误:" + e.Error.Message);
}
else
{
MessageBox.Show("操作已完成");
}
}
```
在上述代码中,buttonStart_Click事件处理程序中创建了一个BackgroundWorker对象,并设置DoWork事件处理程序、支持进度报告和取消操作。然后调用RunWorkerAsync方法启动新线程。在worker_DoWork事件处理程序中执行耗时操作,并发送进度报告。在worker_ProgressChanged事件处理程序中更新进度条。在worker_RunWorkerCompleted事件处理程序中检查是否取消操作或发生错误,并显示相应的消息。
阅读全文