[英]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在后台运行繁重的进程。 正如在讨论这个职位。
为此,您需要在应用程序中实现线程。 如果您在页面加载方法中编写任何代码。 在完全执行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.