2012-10-02 17 views
0

我正在使用WPF瀏覽器應用程序。我想知道我何時能夠理解何時加載完頁面並顯示組件開始加載沉重的後臺服務。否則,我只是看到一個白色的頁面幾秒鐘,直到所有的服務都加載...任何建議來解決這個問題?是否有可能瞭解何時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_loaded中沒有繁重的進程,每件事都會很快加載,所以UI中沒有任何問題。

更新:我從頁面或窗口的加載事件中瞭解到的事情是,它在頁面或窗口加載時觸發,並在頁面上加載組件和控件,甚至在頁面或窗口的樣式發生後...我似乎沒有發現任何事件表明控制器的加載已完成...

UPDATE2:對於我的問題更好的解決方案是使用BackgroundWorker或Dispatcher運行繁重的進程背景。正如this文章中所述。

+2

您可以收聽Window,'Page或UserControl'的'Loaded'事件。 – Guillaume

+0

Guillaume發表您的評論作爲一個aswer我應該說... –

+1

@YoupTube,都鐸爲​​我做了! – Guillaume

回答

2

您需要在此應用程序中實現線程化。如果您在頁面加載方法中編寫任何代碼。在加載方法完全執行之前,您的頁面不會呈現。因此您可以使用Background Worker並在後臺運行進程

2

Window類提供了Loaded事件:

當元素已佈局,已呈現且可用於交互時發生。

掛鉤的處理程序和執行代碼的有:

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

我已經試過了,它沒有工作,我似乎...是否有任何事件顯示加載完成? –

+0

@Mahsa Teimourikia:根據文檔載入時被激活,載入完成並且所有控件都被初始化。你的情況發生了什麼? – Tudor

+0

對我來說,頁面組件不會被初始化,直到page_loaded中的每個進程完成... –

1

按我對你的問題的評論和每鐸的回答,您需要在您的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的外觀。

+0

我試着在page_loaded中設置一個計時器,並在計時器啓動之前和計時器完成後顯示一條消息,以瞭解何時這個page_loaded被執行,當組件尚未被加載時彈出兩個消息... Kinect的初始化與UI組件沒有任何關係,並且page_loaded事件被正確地引用... –

+0

你需要顯示更多代碼來獲得更多幫助。 XAML是什麼樣的? Kinect初始化在哪裏,何時以及如何完成?你的不同組件之間有什麼不同的相互作用?否則,我們只能提供猜測和近似值。 – Guillaume

+0

我會編輯我的問題,並添加相關的代碼 –

相關問題