运行时更新标签(WPF)

时间:2015-07-01 18:35:10

标签: c# wpf label progress-bar dispatcher

我试图更新"状态栏"代码执行期间标记以通知用户进度。

我有以下代码:

    private void FindDupsBtn_Click(object sender, RoutedEventArgs e)
    {
        var t = Stopwatch.StartNew();
        StatusLbl.Content = "Getting File Info";
        StatusLbl.Refresh();
        //StatusLbl.ChangeContent("Getting File Info");
        //code continues
    }

使用以下扩展方法:

public static class MyExtensions
{
    private static Action EmptyDelegate = delegate() { };

    public static void Refresh(this UIElement uiElement)
    {
        uiElement.Dispatcher.Invoke(DispatcherPriority.Background, EmptyDelegate);
    }
    public static void ChangeContent(this Label label,string content)
    {
        label.Content = content;
        label.Refresh();
    }
}

我希望StatusLbl.Content ="" + StatusLbl.Refresh()产生与StatusLbl.ChangeContent("")相同的结果。但是,当我在末尾运行带有断点的代码时,我从ChangeContent得到了不一致的结果:有时标签已经改变,有时候它没有。到目前为止,Content + Refresh每次都有效。

以下是我的问题:

  1. 为什么会出现这种情况?我可以让ChangeContent保持一致吗?(我意识到这个错误可能难以重现,所以如果你遇到麻烦,请告诉我,我会尽力帮助)。
  2. 在运行期间有更好的方法来更新进度吗?我不需要任何复杂的东西。
  3. 我尝试过的内容:我没有内置的Windows窗体更新方法或VB DoEvents。我尝试过InvalidateVisual并尝试为StatusLbl设置数据绑定。我现在所拥有的是我在网上发现的几种解决方案的混合物,这些解决方案并不是自己工作的。

    编辑:稍后在我的代码中,我使用了Content + Refresh,但它没有用。当我暂停执行时,代码已经过了,标签没有更新。我想这意味着我只想知道:在代码执行期间更新UI控件的最简单方法是什么?

0 个答案:

没有答案