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()。