[英]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.