在不同的类中使用 BackgroundWorker 和 ProgressBar,可以通过事件来通信。
首先,在 UI 线程中实例化 BackgroundWorker 和 ProgressBar,并将 BackgroundWorker 的事件与 ProgressBar 相关联,具体代码如下:
public partial class MainForm : Form
{
private BackgroundWorker worker;
public MainForm()
{
InitializeComponent();
worker = new BackgroundWorker();
worker.WorkerReportsProgress = true;
worker.DoWork += Worker_DoWork;
worker.ProgressChanged += Worker_ProgressChanged;
}
private void StartButton_Click(object sender, EventArgs e)
{
worker.RunWorkerAsync();
}
private void Worker_DoWork(object sender, DoWorkEventArgs e)
{
// 执行后台任务
}
private void Worker_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
progressBar.Value = e.ProgressPercentage;
}
}
然后,在另一个类中调用 BackgroundWorker 的 ReportProgress() 方法,触发 ProgressChanged 事件,更新 ProgressBar。具体代码如下:
public class WorkerClass
{
private BackgroundWorker worker;
public WorkerClass(BackgroundWorker worker)
{
this.worker = worker;
}
public void DoWork()
{
for (int i = 0; i < 100; i++)
{
// 执行后台任务
worker.ReportProgress(i);
}
}
}
这样就可以在不同的类中使用 BackgroundWorker 和 ProgressBar,并通过事件来通信了。