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() 没有帮助。
With Dispatcher.BeginInvoke
你仍在使用 UI 线程LongTimeMethod()
。如果这不是必需的(即它正在执行某种后台处理),我建议使用 TPL 在后台线程上运行它:
private void ButtonClick_EventHandler(object sender, RoutedEventArgs e)
{
Label.Visibility = Visibility.Visible;
TextBox.Text = "Processing...";
Task.Factory.StartNew(() => LongTimeMethod())
.ContinueWith(t =>
{
Dispatcher.BeginInvoke((Action)delegate()
{
TextBox.Text = "Done!";
});
});
}
使用此方法,长时间运行的方法将在后台线程上处理(因此 UI 线程将可以自由地继续渲染,并且应用程序不会冻结),并且您可以执行任何更改 UI 的操作(例如更新文本框)文本)在用户界面上Dispatcher
当后台任务完成时
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)