【问题标题】:Start SurfaceWindow AND WPF-Window in same Thread在同一线程中启动 SurfaceWindow 和 WPF-Window
【发布时间】:2011-06-17 21:00:40
【问题描述】:

我遇到了多线程问题 - 我正在开发一个包含两个窗口的框架:一个 surfacwindow 和一个普通的 wpfwindow。

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

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

但是我不希望WPF-Window在SurfaceWindow的Contructor中启动,但是效果一样!

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

 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();

    }

我会很高兴得到任何帮助! 谢谢, 克里斯

【问题讨论】:

    标签: c# wpf multithreading pixelsense


    【解决方案1】:

    我了解到您希望在启动时显示 2 个窗口并能够相互交互。不需要花哨的线程代码。

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

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

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

    【讨论】:

      猜你喜欢
      • 2013-01-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-13
      • 1970-01-01
      • 1970-01-01
      • 2016-02-02
      相关资源
      最近更新 更多