【发布时间】:2021-09-13 06:46:50
【问题描述】:
我有 2 个表单,MainForm 和 ProgressForm。
#1 MainForm.cs 有一个按钮,点击它会启动我的 backgroundWorker1。
ProgressForm pg = new ProgressForm();
private void StarBtn_Click(object sender, EventArgs e)
{
pg.Show();
if(!backgroundWorker1.IsBusy)
{
backgroundWorker1.RunWorkerAsync();
}
}
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
//time consuming tasks...
}
#2 ProgressForm 是我添加进度条和标签的地方。
namespace MainApp
{
public partial class ProgressForm : Form
{
public ProgressForm()
{
InitializeComponent();
}
}
}
我需要在MainForm 到progressBar1 中显示我的后台进程在ProgressForm 中的进度(如下)
private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
//something like..
//this.progressBar1.Value = e.ProgressPercentage;
//in ProgressForm...
}
并显示已完成的标签并关闭表单。
private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
//label.Text = "Completed"
// Close the ProgressForm...
}
如何从 MainForm 的 backgroundworker 访问 ProgressFrom 中的元素并更新进度。
【问题讨论】:
-
作为旁注,
BackgroundWorker类是 technologically obsolete。将工作卸载到后台线程的更好方法是Task.Run方法,结合 async/await。
标签: c# winforms progress-bar backgroundworker