繁体   English   中英

为什么控件的可见性属性不会立即更新?

[英]Why control's visibility property doesn't update immediately?

我有一个关于 UIElement.Visibility 属性的问题。

单击“StartAll”按钮时执行以下代码:

private void butStartAllClick(object sender, RoutedEventArgs e)
    {
        butStartAll.Content = "Running";

        LEDInitializing.Visibility = Visibility.Visible;
        lblInitializing.Visibility = Visibility.Visible;

        Init();

        //...rest of code
    }

Init 然后启动一个冗长的初始化例程。 我的问题是可见性属性仅在Init()方法结束时修改。

我如何让它立即更新?

我试过像这样使用 Dispatcher:

    LEDInitializing.Dispatcher.BeginInvoke(
                System.Windows.Threading.DispatcherPriority.Normal,
                                   new Action(
                                       delegate()
                                       {
                                           LEDInitializing.Visibility = Visibility.Visible;
                                       }
                                       ));

但这并不能解决我的问题。

任何帮助将不胜感激:)

通过在 UI 线程上运行Init ,您可以阻止您所做的任何 UI 更改运行,直到它完成并且butStartAllClick退出之后。 根据Init您可能只能在单独的线程上运行它(此处为 4.5,在 4.0 中使用TaskFactory ):

private void butStartAllClick(object sender, RoutedEventArgs e)
{
    butStartAll.Content = "Running";

    LEDInitializing.Visibility = Visibility.Visible;
    lblInitializing.Visibility = Visibility.Visible;

    Task.Run(() =>
    {
        Init();
        //...rest of code
    });
}

如果Init或以下代码正在执行任何需要与 UI 交互的操作,则您需要将其分解并使用对 UI 的回调来根据需要执行这些更新。 4.5 中的async/await模式通常是执行此操作的最简单方法,但您可以通过手动设置Task continuations 在 4.0 中获得相同的效果。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM