2011-10-29 22 views
1

我有一个使用WPF创建的非常复杂的窗口。在后台创建复杂的WPF窗口

由于需要很长的时间来加载(约10秒),我想要的应用程序启动后在后台创建的窗口。

我的壳中包含一个按钮,其将被用于该窗口,当用户点击它。这个想法是加载应用程序,这个按钮被禁用。加载后,我的复合体将在后台创建。当窗口被创建时,我可以启用此按钮并且用户可以使用它。

但它是非常重要的,该应用程序不会阻止,而该窗口会在后台创建。用户此时应该能够使用其他模块。

有人知道一种方法来达到我的目标吗?

也许有人知道,如果有更多的可能性,达到在未来的.NET框架4.5这个目标呢?

回答

0

您可以在后台线程中创建窗口。你需要注意的事情是:

  1. 线程必须是STA,并且应该是后台线程,所以如果主应用程序线程被终止,它将被终止。
  2. 您必须保持该后台线程活着,否则您将失去窗口。
  3. 引用其他GUI元素时,如果该GUI元素来自另一个线程,则应使用Dispatcher.Invoke或Dispatcher.BeginInvoke。

下面是在后台线程创建窗口的例子:

 Thread thread = new Thread(() => 
     { 
      Window windowInAnotherThread = new Window(); 
      windowInAnotherThread.Show(); 
      System.Windows.Threading.Dispatcher.Run(); 
     }) { IsBackground = true }; 
     thread.SetApartmentState(ApartmentState.STA); 
     thread.Start(); 
0

使用BackgroundWorker

请注意,您不能创建在BackgroundWorker实际窗口。该窗口需要在UI线程上创建。但是,您可以在BackgroundWorker中加载所有必要的数据,并在加载后使用表单中的数据。