2016-03-21 62 views
0

我想有可能中止渲染線程,我還沒有找到其他解決方案來解決我的問題: 我有一個MVVM架構的項目,在我的ShellView中我有一個帶有按鈕的菜單,可以在ContentControl中選擇不同的視圖。 由於每個視圖中有許多控件,爲了改善與用戶的交互,我摺疊了佈局控件的可見性,該控件包含視圖構造函數中的所有子控件,接下來在視圖加載後呈現可見。 它允許在渲染子控件之前首先顯示視圖。渲染線程的視覺樹

問題是在渲染過程中,如果我嘗試更改視圖,我必須等待顯示新選定的當前視圖的渲染。

所以我的想法是中止當前視圖的渲染並優先顯示新視圖。我怎樣才能做到這一點?

回答

0

如果是你自己的代碼花費時間在那個子控件中(例如,如果你使用Direct3D interop渲染3D遊戲,或者在CPU上產生一些難以計算的位圖,或者在GUI線程上使用阻塞I/O等)。 - 在這種情況下,您可以將該工作卸載到某個其他線程(或切換到非阻塞I/O,如果是這種情況),並且只更新一次完成的GUI線程。

但是,如果它是WPF渲染需要那麼多時間,這意味着你的視覺樹有什麼問題。 Read this article for a start。如果幸運的話,您只需將幾行XAML改爲啓用虛擬化。如果不是,則必須重新整理您的整個GUI以修復性能問題。