在WPF中存在UI更新问题。
我有这样的代码:
private void ButtonClick_EventHandler(object sender, RoutedEventArgs e)
{
Label.Visibility = Visibility.Visible;
TextBox.Text = "Processing...";
LongTimeMethod(); //some long operation
}
问题在于直到 LongTimeMethod 结束(即事件处理程序结束)之前,Label.Visibility 和 TextBox.Text 不会被更改。
目前我解决这个问题的方法是:
private void ButtonClick_EventHandler(object sender, RoutedEventArgs e)
{
Label.Visibility = Visibility.Visible;
TextBox.Text = "Processing...";
Dispatcher.BeginInvoke(new Action(LongTimeMethod),
DispatcherPriority.Background);
}
有没有其他解决方案不需要使用调度程序调用?调用 this.UpdateLayout() 也无法解决问题。
Dispatcher.BeginInvoke
,您在说“在UI线程上执行此操作,但现在不要执行它;等你完成当前任务时再执行它”。这就是为什么您可以看到更新的UI的原因。 - Steve Greatrex