2011-08-13 95 views
2

我正在使用導航框架編寫WPF應用程序。我試圖在等待頁面加載時顯示進度條。NavigationProgress不顯示進度條

msdn page賽斯:

導航:當請求新的導航時發生。可用於 取消導航。

NavigationProgress:在下載過程中定期發生,以提供導航 進度信息。

導航:頁面被找到並下載時發生。

所以我有一個網格(navigationStatusGrid)與進度(navigationProgressBar),我有一個框架(mainFrame中)

這是我的事件處理程序:

private void mainFrame_NavigationProgress(object sender, NavigationProgressEventArgs e) 
{ 
    long progress = e.BytesRead * 100/e.MaxBytes; 
    Console.WriteLine("Navigating progress:" + progress + "%"); 
    navigationProgressBar.Value = progress; 
} 

private void mainFrame_Navigating(object sender, NavigatingCancelEventArgs e) 
{ 
    Console.WriteLine("start navigating"); 
    mainFrame.Visibility = Visibility.Hidden; 
    navigationStatusGrid.Visibility= Visibility.Visible; 
} 

private void mainFrame_Navigated(object sender, NavigationEventArgs e) 
{ 
    Console.WriteLine("end navigating"); 
    mainFrame.Visibility = Visibility.Visible; 
    navigationStatusGrid.Visibility = Visibility.Hidden; 
} 

這是我的輸出:

start navigating 
Navigating progress:4% 
Navigating progress:8% 
... 
Navigating progress:87% 
Navigating progress:92% 
Navigating progress:96% 
Navigating progress:99% 
Navigating progress:100% 
Navigating progress:100% 
end navigating 

所以你會說它的工作原理,但不知何故UI只會在頁面加載時得到更新。用戶界面甚至在加載時凍結...我無法立即看到進度欄,只是立即加載頁面。我該如何解決這個問題?

+0

我什至不能得到進展事件被解僱,出於某種原因... –

+0

mainFrame.Source = new Uri(「Views/Home.xaml」,UriKind.Relative); 其中「Views/Home.xaml」是我正在加載的頁面。爲我啓動事件,但我認爲存在一些線程問題。就像導航發生在與我的UI相同的線程或其他東西.. – VDP

+0

@VDP你有沒有發現任何解決方案,以顯示加載第二頁 –

回答

0

進度事件似乎對我來說毫無用處,而文檔聲稱導航發生在一個地方(如果使用Navigate方法),我無法確定它的哪一部分應該是同步的。

如果你有一個大的XAML會凍結用戶界面,如果你有一個長時間運行的構造函數會凍結用戶界面,並且如果你導航到一個web頁面,甚至不會觸發進度事件。

至少一些,這是有道理的控制是線程仿射,如果對象是要在不同的線程會導致問題異步創建。如果你有一個長期運行的consctructor,你需要將工作外部化到本地線程,因爲構造函數本身需要在UI線程上調用。

+0

我也努力實現適當的等待進度,同時完成導航到新頁面。您是否有任何其他建議來實施進度條來顯示加載頁面的開始和結束? –

+0

對不起,不知道,通常不使用框架。 –