2013-02-27 69 views
0

我正在更新backgroundworker progressChanged事件上的標籤文本(字面上在此事件回調中的一行代碼)。在C#winforms中,UI標籤爲什麼不更新並跟上backgroundworker progresschanged事件?

它在約45秒內更新約50次,問題在於UI似乎只更新了大約10次。所以看起來UI並沒有跟上事件的數量。

無論如何,有幫助改善這一點。我看到人們建議APplication.DoEvents(),但總是認爲這有點狡猾。

void worker_ProgressChanged(object sender, ProgressChangedEventArgs e) 
{ 
     lblProgress.Text = "Updating Progress: " + e.ProgressPercentage; 
} 

在這裏有一個推薦的做法,所以我看到在UI上的每一個更新?

+0

試圖lblProgress.Invalidate()後? – aliassce 2013-02-27 14:52:25

+0

我對工作人員並不熟悉,但如果它不在UI線程中運行,它會拋出異常。你有沒有嘗試使用Invoke或BeginInvoke在UI線程上運行? – 2013-02-27 14:53:54

+0

我一直更新工作線程中的進度條/標籤,並使用方法調用程序(由表單調用以確保線程安全)可能值得嘗試 – RobJohnson 2013-02-27 14:54:38

回答

2

嘗試撥打:

this.lblProgress.Refresh(); 

設置文本屬性

0

我只有過一次發生這種事,當時,我找到了最好的方法是隻需要調用更新:

void worker_ProgressChanged(object sender, ProgressChangedEventArgs e) 
{ 
     lblProgress.Text = "Updating Progress: " + e.ProgressPercentage; 
     lblProgress.Update(); 
} 

根據您標籤的文本是多麼重要,你可以調用Refresh()代替爲更直接重繪。

相關問題