在同一线程中启动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
我知道您希望在启动时显示两个窗口,并能够相互交互。不需要花哨的线程代码。
打开你的App.xaml文件。"StartupUri"有一个属性。删除它-这基本上是告诉WPF在应用程序启动时显示特定窗口的快捷方式。。。您可以跳过此操作,并在自己的启动行为中编写代码。要做到这一点,接下来打开App.xaml.cs并插入如下内容:
Window1 window1 = new Window1();
Window2 window2 = new Window2(window1);
window1.Show();
window2.Show();
当然,这假设您的窗口类命名为Window1和Window2,并且您向Window2添加了一个构造函数,该构造函数采用Window1的实例。