在控制台应用程序中实例化WinForm

时间:2010-12-22 13:46:37

标签: c# .net winforms

当我运行以下代码时,两个表单都“挂起”。任何想法为什么?

    static void Main()
    {

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

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


        Console.ReadLine();
    }

3 个答案:

答案 0 :(得分:6)

因为你的帖子中没有消息循环。

要使表单正常工作,您必须通过Application.Run(form) (MSDN Link)

打开它

答案 1 :(得分:2)

基本上,您需要调用Application.Run才能处理窗口的消息。

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

如果你想要几个没有特别重要的窗口,只需使用Application.Run(),然后通过调用Application.Exit()自行决定退出应用程序。

另一种方法是在第二个表单上调用Form.ShowDialogShowDialog有自己的消息泵,因此当第二个窗口打开时,将同时处理两个窗口的消息。但在这种情况下,当您调用ShowDialog的窗口关闭时,另一个窗口将被冻结。

答案 2 :(得分:0)

您是否在这些表格上有任何互动,或者他们是空的测试?

我原以为代码会在与控制台窗口相同的线程上启动表单 - 而Show()会阻塞,直到表示显示退出。可能是控制台窗口也会阻塞,从而导致死锁。如果你能够关闭f1,我希望控制台执行继续。

编辑:其他答案表明我完全错了。忽略我说的话。在任何情况下,我认为在对话窗口上实际上ShowDialog()阻止,而不是Show()