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

C# 在控制台应用程序中实例化WinForm,c#,.net,winforms,C#,.net,Winforms,当我运行以下代码时,两种形式都“挂起”。知道为什么吗 static void Main() { Form f1 = new Form(); f1.Show(); Form f2 = new Form(); f2.Show(); Console.ReadLine(); } 因为线程中没有消息循环 要使窗体正常工作,必须通过应用程序打开它。运行(窗体)这些窗体上是否有任何交互,或者它们是

当我运行以下代码时,两种形式都“挂起”。知道为什么吗

    static void Main()
    {

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

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


        Console.ReadLine();
    }

因为线程中没有消息循环


要使窗体正常工作,必须通过
应用程序打开它。运行(窗体)

这些窗体上是否有任何交互,或者它们是空的测试窗体

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


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

基本上,您需要调用
应用程序。运行
来处理窗口的消息

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

如果您希望多个窗口中没有特别重要的窗口,只需使用
Application.Run()
,并通过调用
Application.exit()
自行决定何时退出应用程序


另一种选择是在第二个表单上调用
Form.ShowDialog
<代码>显示对话框
有自己的消息泵,因此当第二个窗口打开时,将为两个窗口处理消息。但是在这种情况下,当您调用
ShowDialog
的窗口关闭时,另一个窗口将被冻结。

提示:查看Windows应用程序中的main方法,看看它还需要处理哪些表单。你在这里也需要它。:)谢谢你的回答。这是让表单运行的唯一方法吗?另一种方法是使用
ShowDialog
,它自己进行消息泵送。这就是我想要的。我没有意识到我可以在没有Form/ApplicationContext作为参数的情况下运行Application.run()。