我正在尝试打开一个新的窗体,但它似乎每次都会立即关闭。 如果我使用ShowDialog()而不是Show(),它可以工作,但这不是我的意图。
class Forms
{
Main mainForm;
Thread mainThread;
public Forms()
{
}
private void ThreadProc()
{
try
{
mainForm = new Main();
mainForm.Show();
}
catch { }
}
public void startMain()
{
mainThread = new Thread(new ThreadStart(ThreadProc));
mainThread.SetApartmentState(ApartmentState.STA);
mainThread.Start();
}
}
答案 0 :(得分:5)
问题是你的mainThread没有运行任何消息循环(负责对所有与GUI相关的消息做出反应,比如调整大小,按钮点击等等),所以在调用mainForm.Show()
线程之后饰面。
事实上,winforms应用程序通常是这样开始的:
Application.Run(new MainForm());
其中,正如您在MSDN documentation中看到的那样,Application.Run
在当前线程中启动标准消息循环并显示表单。
如果你使用ShowDialog()
它是有效的,因为模态表单在内部运行自己的消息循环。
我不知道你想要完成什么,但ShowDialog可能是最简单的解决方案;如果您不喜欢它,只需将您的mainForm.Show
替换为Application.Run(mainForm)
即可。
答案 1 :(得分:3)
您需要使用Application.Run来启动应用程序消息循环,否则程序将像控制台应用程序一样,并在代码完成执行后关闭。
将using System.Windows.Forms;
添加到班级的顶部。
然后在ThreadProc中将mainForm.Show();
更改为Application.Run(mainForm);
。
答案 2 :(得分:1)