打开新的窗体窗口,立即关闭

时间:2014-01-12 17:23:44

标签: c# winforms

我正在尝试打开一个新的窗体,但它似乎每次都会立即关闭。 如果我使用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();
    }
}

3 个答案:

答案 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)

你应该use

Application.Run(new MainForm());
  

开始在当前运行标准的应用程序消息循环   线程,并使指定的表单可见。