2011-07-27 31 views
3

我有非常大的用戶控制,沒有顯示在主屏幕上,但用戶幾乎總是在以後使用它。第一次加載需要一些時間(解析BAML等),然後構建其他實例的速度非常快。問題是如何使它在啓動屏幕期間在應用程序啓動時預加載?如何在應用程序啓動時預加載XAML?

我的想法是,在啓動時構建usused例如:

void Startup() 
{ 
    //.... 
    new MyCustomControl(); 
    //.... 
} 

但我必須處理特殊情況建設(它不具有無參數的默認構造函數)。我覺得應該有更方便的方法。

+0

查看此視頻,或許您會發現它有幫助:[WF4 Performance Tip-Cache Activities] [1] [1]:http://blogs.msdn.com/b/endpoint/archive/2011/02/12 /wf4-performance-tip-cache-activities.aspx – sll

+0

這是關於工作流程,而不是wpf – Poma

回答

0

你可以使用App構造函數或啓動

App() 
    { 
     System.Diagnostics.Debug.WriteLine("App ctor"); 
     //ctor 
    } 

    private void Application_Startup(object sender, StartupEventArgs e) 
    { 
     System.Diagnostics.Debug.WriteLine("App Startup"); 
    } 
1

要預裝複雜的用戶界面,讓他們花費更少的時間時,他們實際上是在屏幕上「看」,我們就必須遵循以下步驟......

  1. 使其加載到不可見模式。將所有綁定更改爲基於可見性觸發器。這種方式UI線程既不會阻止也不需要時間來執行不可見模式下的渲染。

    <Style TargetType="TextBlock"> 
         <Style.Triggers> 
           <Trigger Property="IsVisible" Value="True"> 
             <Setter Property="Text" Value="{Binding Value}"/> 
           </Trigger> 
         </Style.Triggers> 
    </Style> 
    
  2. 從UI加載中分離數據上下文(viewmodel)加載。這意味着用戶控件表示的任何數據都可以加載到工作線程上,然後必須使用Dispatcher.BeginInvoke()通知UI。確保在UI可見時發生這種情況,否則綁定將由於步驟1而生效。

  3. 當UI實際上被「查看」時,編排UI區域的加載。使用擴展器,默認情況下崩潰他們......但用戶界面中查看時,開始使用滑動動畫和內容的不透明度動畫顯示它裏面等內容滑動擴展...

在我們的應用中使用這種技術可以實現複雜的用戶界面以快速加載和響應。一個這樣的UI在查看時是地理地圖,不僅會阻塞UI線程,而且還需要20秒才能加載。使用上述步驟將加載減少到4秒,並且不會阻塞UI線程。

我希望這些步驟對您也有幫助。

相關問題