【问题标题】:In C# winforms, why is the UI label not updating and keeping up with backgroundworker progresschanged event?在 C# winforms 中,为什么 UI 标签没有更新并跟上 backgroundworker progresschanged 事件?
【发布时间】:2013-02-27 22:53:20
【问题描述】:

我正在更新 backgroundworker progressChanged 事件上的标签文本(字面意思是此事件回调中的 1 行代码)。

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

有没有办法帮助改善这一点。我看到人们建议 APplication.DoEvents() 但一直认为这有点狡猾。

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

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

【问题讨论】:

  • 试过 lblProgress.Invalidate()?
  • 我对 worker 不熟悉,但如果它不在 UI 线程中运行,它会抛出异常。您是否尝试过使用 Invoke 或 BeginInvoke 在 UI 线程上运行?
  • 我一直在工作线程中更新我的进度条/标签,并且只使用了一个方法调用程序,由表单调用以确保线程安全,可能值得尝试

标签: c# winforms backgroundworker


【解决方案1】:

尝试调用:

this.lblProgress.Refresh();

设置文本属性后

【讨论】:

    【解决方案2】:

    我以前只发生过一次,当时我发现最好的方法就是调用更新:

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

    根据标签文本的重要性,您可以调用 Refresh() 来进行更直接的重绘。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-08-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-26
      • 1970-01-01
      • 2020-05-30
      • 1970-01-01
      相关资源
      最近更新 更多