我有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工作时,选取框进度条冻结,看起来该应用程序已挂起。
我该怎么办?
答案 0 :(得分:2)
显示带ShowDialog
的进度对话框会阻止UI线程,因此无法更新进度。完成后台工作程序后,UI上的代码更新内容因同样的原因无法执行。
要走的路是:
你现在在评论中说你的进度条实际上是一个选框,没有显示任何真正的进展。解决方案并不重要 - 只是不要进行更新。
问题是ShowDialog
阻止你的UI线程,直到对话框关闭,你无法从代码中做到这一点。使它成为一个非模态对话框,你应该没问题。