我正在更新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上的每一個更新?
試圖lblProgress.Invalidate()後? – aliassce 2013-02-27 14:52:25
我對工作人員並不熟悉,但如果它不在UI線程中運行,它會拋出異常。你有沒有嘗試使用Invoke或BeginInvoke在UI線程上運行? – 2013-02-27 14:53:54
我一直更新工作線程中的進度條/標籤,並使用方法調用程序(由表單調用以確保線程安全)可能值得嘗試 – RobJohnson 2013-02-27 14:54:38