如何在控制台项目中使用Main()启动窗口。

问题描述:

我有一个控制台项目,但现在我需要把用户界面。所以我使用3层模型(演示,业务,访问数据)。如何在控制台项目中使用Main()启动窗口。

在我的方法Main()我打电话给表示层(如窗口窗体或Wpf中的应用程序),因此,在表示层是通过CONSOLE与用户交互。

现在我在表示层中添加一个名为“UserInterface.xaml”的窗口来代替控制台。因为应该用INTERFACE而不是控制台。我注意到在MainWindow中调用的是MainWindow.Show();

但我不知道如何调用我的“UserInterface.xaml”,因为没有.Show()方法。

这是我的方法主要:

public static void Main() 
{ 
    MainWindow.Show(); // THIS IS WITH MainWindow.xaml 
    UserInterface.??? // THIS IS MY CASE WITH UserInterface.xaml 
} 

所以有人可以告诉我怎样才能从Main方法调用我的窗口?

+0

可能重复[自Programm类以来打开窗口?](http://*.com/questions/6073658/open-a-window-since-programm-class) – 2011-05-21 11:44:28

你一定开始了与错误的项目模板。为了使WPF窗口可见和交互,你必须遵循UI线程的规则。其中包括将应用程序的主线程标记为STA线程并抽取消息循环。就像这样:

class Program { 
    [STAThread] 
    public static void Main() { 
     var app = new Application(); 
     app.Run(new MainWindow()); 
    } 
} 

当心Application.Run()是一个阻塞调用,它不会返回,直到用户关闭主窗口。这是Windows工作方式的一个不可避免的后果。

+0

是的,在我的情况下,我做了这个:var app = new UserInterface(); app.Run(新程序());但不承认.Run – ale 2011-05-19 23:17:15

+0

好的,你得到了回报。 – 2011-05-19 23:52:01

+0

现在我打开窗户[STAThread],但又关闭了!为什么会发生这种情况?我该怎么做? – ale 2011-05-20 14:18:27

假设UserInterface真的是一个窗口,这应该工作:

var window = new UserInterface(); 
window.Show(); 
+0

不能识别.Show();. ..和UserInterface是一个窗口。 – ale 2011-05-19 23:15:08

+0

在这种情况下,你将不得不向我们展示更多的代码,因为如果'UserInterface'是一个'Window',它将有一个'Show()'方法。 UserInterface的源代码是怎么样的? – svick 2011-05-19 23:28:42

+0

这是UserInterface类的一部分,您看到的是一个普通窗口:public class UserInterface:Window { public EventHandler OptionSelected; public void SetPathCharger2() { InitializeComponent(); }} – ale 2011-05-20 13:40:42