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

在C#winforms中,为什么UI标签不更新并跟上backgroundworker progresschanged事件?,c#,winforms,backgroundworker,C#,Winforms,Backgroundworker,我正在更新backgroundworker progressChanged事件上的标签文本(在这个事件回调中实际上是一行代码) 它在45秒内更新了大约50次,问题是UI似乎只更新了大约10次。因此,UI似乎没有“跟上”事件的数量 是否有任何方法可以帮助改善这一点。我看到了People suggestions APplication.DoEvents(),但我一直认为这有点不可靠 void worker_ProgressChanged(object sender, ProgressChangedE

我正在更新backgroundworker progressChanged事件上的标签文本(在这个事件回调中实际上是一行代码)

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

是否有任何方法可以帮助改善这一点。我看到了People suggestions APplication.DoEvents(),但我一直认为这有点不可靠

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

这里有推荐的做法吗?这样我就可以看到UI上的每个更新了?

我以前只遇到过一次这样的情况,当时,我发现最好的方法就是调用update:

void worker_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
      lblProgress.Text = "Updating Progress: " +  e.ProgressPercentage;
      lblProgress.Update();
}
根据标签文本的重要性,您可以调用
Refresh()
来进行更直接的重画。

尝试调用:

this.lblProgress.Refresh();

设置文本属性后

尝试了lblProgress.Invalidate()?我不熟悉worker,但如果它没有在UI线程中运行,它将引发异常。您是否尝试过使用Invoke或BeginInvoke在UI线程上运行?我总是在工作线程中更新我的进度条/标签,只是使用了一个方法调用程序,由表单调用以确保线程安全,也许值得尝试一下