在同一线程中启动SurfaceWindow和WPF Window

本文关键字:SurfaceWindow WPF Window 启动 一线 线程 | 更新日期: 2023-09-27 17:59:14

我在多线程方面遇到了一个问题——我正在开发一个包括两个窗口的框架:一个surfacewindow和一个普通的wpfwindow。

在我的第一次测试中,由于我的visualstudio项目选择,SurfaceWindow被自动启动,在我的Surface Window的构造函数中,我已经启动了GUI。两个Windows都有一个线程->没有问题;)

知道我必须更改顺序,我的起点是一个常见的.cs类,我在线程方面有困难。。。对我来说,完美的解决方案是首先启动SurfaceWindow,然后启动WPF窗口,但在同一个线程中。

但我不希望WPF窗口在SurfaceWindow的构造器中启动,但效果相同!

导致线程问题的代码:(调用线程无法访问此对象,因为该对象由另一个线程所有。)

 public Constructor()
    {
        Thread t = new Thread(new ThreadStart(StartSurfaceWIndowThread));
        t.SetApartmentState(ApartmentState.STA);
        t.Start();
        startWindow();
    }
    private void StartNewStaThread() {
        AdaptivePrototype.App app = new AdaptivePrototype.App();
        app.InitializeComponent();
        app.Run();
    }
    private void startWindow()
    {
            Thread thread = new Thread(() =>
            {
                WPFkGui w = new WPFGui(this);
                w.Show();
                System.Windows.Threading.Dispatcher.Run();
            });
            thread.SetApartmentState(ApartmentState.STA);
            thread.Start();
    }

现在的代码,这将是一个完美的解决方案,但它没有显示WPFGUI:

 public Constructor()
    {
        Thread t = new Thread(new ThreadStart(StartSurfaceWIndowThread));
        t.SetApartmentState(ApartmentState.STA);
        t.Start();
        startWindow();
    }
    private void StartNewStaThread() {
        AdaptivePrototype.App app = new AdaptivePrototype.App();
        app.InitializeComponent();
        app.Run();
    WPFkGui w = new WPFGui(this);
        w.Show();
    }

如果有任何帮助,我会很高兴的!谢谢Chris

在同一线程中启动SurfaceWindow和WPF Window

我知道您希望在启动时显示两个窗口,并能够相互交互。不需要花哨的线程代码。

打开你的App.xaml文件。"StartupUri"有一个属性。删除它-这基本上是告诉WPF在应用程序启动时显示特定窗口的快捷方式。。。您可以跳过此操作,并在自己的启动行为中编写代码。要做到这一点,接下来打开App.xaml.cs并插入如下内容:

        Window1 window1 = new Window1();
        Window2 window2 = new Window2(window1);
        window1.Show();
        window2.Show();

当然,这假设您的窗口类命名为Window1和Window2,并且您向Window2添加了一个构造函数,该构造函数采用Window1的实例。