2011-12-04 81 views
-1

我有一個簡單地填充進度條的函數。J#/ C#更新/刷新GUI線程

private void FillProgressBar(ProgressBar bar, Color c, int percent) 
{ 
    int steps = 10; 
    bar.set_Value(0); 
    for (int i = 0; i < percent/steps; i++) 
    { 
     System.Threading.Thread.Sleep(100); 
     bar.set_Value((i+1)*10) + bar.get_Value()); 
     this.Refresh(); 
    } 
} 

我從GUI線程(而不是多線程)中調用它,它的目的是緩慢地填充欄。

但它似乎並沒有這樣做,儘管價值確實提高了。

有關如何更新特定控件或整個表單的任何建議? PS:你可以看到,這個.Refresh()也不起作用。

回答

1

嘗試使用

Application.DoEvents(); 

更新進度條後。

更多DoEventshere

1

您當前密碼不要讓主消息循環執行,所以它會阻止包括那些WM_PAINT所有消息...

你不應該這樣做,使用一個線程,使用一個計時器:不要阻止用戶界面。

而不要使用Application.DoEvents這是不好的編程習慣,甚至不應該存在。