当我运行以下代码时,两个表单都“挂起”。任何想法为什么?
static void Main()
{
Form f1 = new Form();
f1.Show();
Form f2 = new Form();
f2.Show();
Console.ReadLine();
}
答案 0 :(得分:6)
因为你的帖子中没有消息循环。
要使表单正常工作,您必须通过Application.Run(form)
(MSDN Link)
答案 1 :(得分:2)
基本上,您需要调用Application.Run
才能处理窗口的消息。
如果其中一个表单是您的“主窗口”,即您希望应用程序在窗口关闭时退出,则应使用Application.Run(form)
。
如果你想要几个没有特别重要的窗口,只需使用Application.Run()
,然后通过调用Application.Exit()
自行决定退出应用程序。
另一种方法是在第二个表单上调用Form.ShowDialog
。 ShowDialog
有自己的消息泵,因此当第二个窗口打开时,将同时处理两个窗口的消息。但在这种情况下,当您调用ShowDialog
的窗口关闭时,另一个窗口将被冻结。
答案 2 :(得分:0)
您是否在这些表格上有任何互动,或者他们是空的测试?
我原以为代码会在与控制台窗口相同的线程上启动表单 - 而Show()
会阻塞,直到表示显示退出。可能是控制台窗口也会阻塞,从而导致死锁。如果你能够关闭f1,我希望控制台执行继续。
编辑:其他答案表明我完全错了。忽略我说的话。在任何情况下,我认为在对话窗口上实际上ShowDialog()
阻止,而不是Show()
。