我试图更新"状态栏"代码执行期间标记以通知用户进度。
我有以下代码:
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每次都有效。
以下是我的问题:
我尝试过的内容:我没有内置的Windows窗体更新方法或VB DoEvents。我尝试过InvalidateVisual并尝试为StatusLbl设置数据绑定。我现在所拥有的是我在网上发现的几种解决方案的混合物,这些解决方案并不是自己工作的。
编辑:稍后在我的代码中,我使用了Content + Refresh,但它没有用。当我暂停执行时,代码已经过了,标签没有更新。我想这意味着我只想知道:在代码执行期间更新UI控件的最简单方法是什么?