在后台创建复杂的wpf窗口

本文关键字:wpf 窗口 复杂 后台 创建 | 更新日期: 2023-09-27 18:12:40

我用WPF创建了一个非常复杂的窗口。

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

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

但是非常重要的是,应用程序不会阻塞,而窗口将在后台创建。在这段时间内,用户应该能够使用其他模块。

有没有人知道如何达到我的目标?

也许有人知道,如果有更多的可能性达到这个目标,在下一个。net framework 4.5?

在后台创建复杂的wpf窗口

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

  1. 线程必须是STA,并且应该是后台线程,所以如果主应用程序线程被终止,它将被终止。
  2. 你必须保持后台线程存活,否则你将失去你的窗口。
  3. 当引用其他GUI元素时,应该使用Dispatcher。调用或调度程序。如果GUI元素来自另一个线程,则BeginInvoke。
下面是在后台线程中创建窗口的示例:
        Thread thread = new Thread(() =>
        {
            Window windowInAnotherThread = new Window();
            windowInAnotherThread.Show();
            System.Windows.Threading.Dispatcher.Run();
        }) { IsBackground = true };
        thread.SetApartmentState(ApartmentState.STA);
        thread.Start();

使用BackgroundWorker .

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