2011-07-27 32 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线程。

我希望这些步骤对您也有帮助。

相关问题