[英]using progress bar in background worker
我有2个表单,第二个表单中有进度条。 当我单击主窗体上的按钮时,将打开带有进度栏的Form2:
private void button1_Click(object sender, EventArgs e)
{
this.ShowInTaskbar = false;
this.Visible = false;
bw.RunWorkerAsync();
//Show Form2 with progress bar
Show_pb();
}
Form2 f_pb = new Form2();
Show_pb()
{
f_pb.ShowDialog();
f_pb.Activate();
}
private void bw_DoWork(object sender, DoWorkEventArgs e)
{
//... hard work...
}
之后,在bw_RunWorkerCompleted
我将数据填充到Form1中的某些控件中:
void bw_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
//...updating DataGridView and TreeView...
}
不幸的是,当bw_RunWorkerCompleted工作时, 跑马灯进度栏将冻结,并且看起来该应用程序已挂起。
我能做什么?
使用ShowDialog
显示进度对话框会阻塞UI线程,因此无法更新进度。 出于同样的原因,后台工作人员完成后,UI上的代码更新工作无法执行。
要走的路是:
您现在在评论中说,进度栏实际上是一个选取框,未显示任何实际进度。 解决方案并不重要-只是不进行进度更新。
问题是ShowDialog
阻塞UI线程,直到对话框关闭为止,而这是您无法从代码中完成的。 使其成为非模态对话框,您应该可以。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.