gpt4 book ai didi

wpf - WPF 元素事件处理程序中的 UI 更新

转载 作者:行者123 更新时间:2023-12-04 12:24:34 25 4
gpt4 key购买 nike

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您仍在使用 LongTimeMethod() 的 UI 线程.如果这不是必需的(即它正在进行某种后台处理),我建议使用 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 的操作(例如更新文本框文本)在 UI Dispatcher当后台任务完成时

关于wpf - WPF 元素事件处理程序中的 UI 更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6346088/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com