在C#winforms中,为什么UI标签没有更新并跟上backgroundworker progresschanged事件?

时间:2013-02-27 14:47:01

标签: c# winforms backgroundworker

我正在更新backgroundworker progressChanged事件上的标签文本(在此事件回调中只有一行代码)。

它在大约45秒内更新约50次,问题是UI似乎只更新了大约10次。因此,UI似乎没有“跟上”事件的数量。

无论如何都有助于改善这一点。我看到人们建议APplication.DoEvents()但总是认为这有点狡猾。

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

这里有推荐的做法,所以我看到UI上的每个更新?

2 个答案:

答案 0 :(得分:2)

尝试致电:

this.lblProgress.Refresh();
设置Text-Property

答案 1 :(得分:0)

我之前只发生过这种情况,当时我发现的最佳方法就是调用更新:

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

根据标签文字的重要程度,您可以调用Refresh()代替更快的重绘。