我正在尝试打开一个新的窗体,但它似乎每次都会立即关闭.如果我使用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();
}
}
Run Code Online (Sandbox Code Playgroud)
问题是你的mainThread没有运行任何消息循环(负责对所有与GUI相关的消息做出反应,如调整大小,按钮点击等等),所以在调用mainForm.Show()
线程完成后.
实际上winforms应用程序通常是这样开始的:
Application.Run(new MainForm());
Run Code Online (Sandbox Code Playgroud)
在那里,你可以中看到MSDN文档,Application.Run
开始在当前线程标准的消息循环和显示形式.
如果你使用ShowDialog()
它,因为模态表单在内部运行自己的消息循环.
我不知道你想要完成什么,但ShowDialog可能是最简单的解决方案; 万一你不喜欢它只需更换你mainForm.Show
的Application.Run(mainForm)
,它应该工作.