从控制台应用程序exe在DLL中启动WPF应用程序

时间:2016-03-10 23:17:58

标签: c# wpf visual-studio mvvm dll

目前我在同一个解决方案下有两个独立的C#项目,我们称之为Window.exe和Console.exe。 Window.exe是一个独立运行的WPF MVVM应用程序。

要消除一个小问题,我的目标是将Window.exe转换为Window.dll,然后使用Console.exe加载Window.dll。我试图调用App.Run(),或者在App_Startup中移动例程,该例程用于将主窗口启动到单独的方法并调用它。运行Window.dll的新线程无法真正持续。当我在调试中进入GUI时,它能够填充GUI,但我无法与它进行交互。

关于我应该如何进行的任何想法?

1 个答案:

答案 0 :(得分:3)

我能够通过做两件事来实现这一目标:

  1. 您需要将控制台应用程序中的Main方法标记为STAThread方法,因为UI需要位于STA线程上。如果你不这样做,那么当你调用主窗口的构造函数时,你会得到一个异常。

  2. 确保在Run()之前调用InitializeComponent()。如果你没有,应用程序将会运行,但窗口不会首先设置。

  3. 我能够在一个解决方案中使用它,我也有一个WPF主应用程序和控制台应用程序用于测试:

    #include<stdio.h>
    
    void printTriangleRow(int rowNumber) {
        printf("|");
        for(int i = 0; i < rowNumber; ++i) {
            printf(" ");
        }
        printf("\\\n");
    }
    
    void printTriangleBottom(int sideLength) {
        printf("+");
        for(int i = 0; i < sideLength; ++i) {
            printf("-");
        }
        printf("+\n");
    }
    
    void printTriangleWithSideLength(int sideLength) {
        printf("+\n");
        for(int i = 0; i < sideLength; ++i) {
            printTriangleRow(i);
        }
        printTriangleBottom(sideLength);
    }
    
    int main() {
        int rowCount;
        printf("Enter number of rows: \n");
        scanf("%d", &rowCount);
        printTriangleWithSideLength(rowCount);
    }