繁体   English   中英

是否可以了解WPF窗口或页面控件的加载完成时间?

[英]Is it possible to understand when a WPF window or page controlls loading is complete?

我正在使用WPF浏览器应用程序。 我想知道如何理解页面的加载完成时间,并显示组件开始加载大量后台服务。 否则,我只会看到几秒钟的白页,直到所有服务都加载完毕。

这是我尝试过的事情:

    public Page1()
    {
        InitializeComponent();
    }

    private void Page_Loaded_1(object sender, RoutedEventArgs e)
    {

        // Just some heavy process in the begining
        int j = 1;
        for (int i = 0; i < 10000000; i++)
        {
            for (int k = 0; k < 1000; k++)
                j=j * 2;
        }
        MessageBox.Show("ready");
    }

但是,直到page_loaded中的进程完成后,页面组件才会加载到页面中。 如果没有在page_load中进行繁重的处理,则所有内容都会很快加载,因此UI中没有任何问题。

更新:我从页面或窗口的加载事件中了解到的是,它是在页面或窗口被加载时触发的,并且页面上的组件和控件的加载,甚至样式也会在此之后发生...我似乎没有发现任何事件显示控件的加载已完成...

UPDATE2:对于我的问题,更好的解决方案是使用BackgroundWorker或Dispatcher在后台运行繁重的进程。 正如在讨论这个职位。

Window类提供Loaded事件:

在元素被布置,渲染并准备好进行交互时发生。

连接处理程序并在此处执行代码:

<Window ... Loaded="Window_Loaded"/>

为此,您需要在应用程序中实现线程。 如果您在页面加载方法中编写任何代码。 在完全执行load方法之前,不会呈现您的页面。 因此您可以使用Background Worker并在后台运行进程

根据我对您的问题的评论以及根据Tudor的回答,您需要在Page上使用Loaded事件。

<Page ... Loaded="Page_Loaded_1"/>

现在,从您的不同评论看来,您的Kinect初始化是作为Page UI渲染的一部分完成的。 或者正在处理其他一些耗时的任务。

我完全不知道Kinect的工作方式,但是我怀疑在您的代码中,它的初始化是从Visual Studio Designer的Page添加的控件之一调用的。

例如这样的事情:

<ContentControl DataContext="{Binding MyKinnectStuff}"/>

它可能更微妙。 例如,使用对getter的属性进行数据绑定会调用一种初始化Kinect事物的方法。 仔细检查情况并非如此。

从您在编辑中添加的代码示例中,请确保与Kinect相关的所有内容(初始化,数据绑定等)都位于方法Page_Loaded_1并且不要直接在UI中进行任何操作。 还要确保您没有在UI中执行任何其他耗时的任务。 最后,再次确保在XAML中具有<Page Loaded="Page_Loaded_1"/>而不是<Page Loaded="Something_Else"/>

您应该再次编辑问题,并向我们展示XAML的外观。

暂无
暂无

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

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