2010-12-22 96 views
2

当我运行以下代码时,这两个表单“挂起”。任何想法为什么?在控制台应用程序中实例化WinForm

static void Main() 
    { 

     Form f1 = new Form(); 
     f1.Show(); 

     Form f2 = new Form(); 
     f2.Show(); 


     Console.ReadLine(); 
    } 
+1

提示:查看Windows应用程序中的主要方法,看看它有哪些额外的东西来处理表单。你也需要这个。 :) – 2010-12-22 13:48:58

回答

2

基本上,您需要致电Application.Run以处理窗口的消息。

如果其中一种形式是您的“主窗口”,即您希望窗口关闭时应用程序退出,则应使用Application.Run(form)

如果你想要几个窗口,但都不是特别重要,只需使用Application.Run(),然后通过调用Application.Exit()来决定何时退出应用程序。

另一种替代方法是在第二种形式上调用Form.ShowDialogShowDialog有自己的消息泵,所以当第二个窗口打开时,消息将被处理两个窗口。但在这种情况下,当您调用ShowDialog的窗口关闭时,其他窗口将被冻结。

6

因为您的线程中没有消息循环。

要进行形式工作,您必须打开它通过Application.Run(form)(MSDN Link)

+0

感谢您的答复。这是让表单运行的唯一方法? – gsharp 2010-12-22 13:57:23

+0

AFAIK是的,这是唯一的方法... – digEmAll 2010-12-22 13:59:59

0

你对这些形式的任何交互或者是他们的空测试的呢?

我原以为代码会在与控制台窗口相同的线程上启动窗体 - 并且Show()阻塞,直到窗体显示出来。也可能是控制台窗口阻塞,给你一个死锁。如果可以的话,我希望一旦你关闭了f1,控制台就会继续执行。

编辑:其他答案表明我完全错了。忽略我所说的。无论如何,我认为它实际上是ShowDialog()在一个对话窗口上,而不是Show()

相关问题