c# - 打开新窗口窗体窗口,立即关闭

标签 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();
    }
}

最佳答案

问题是您的 mainThread 没有运行任何消息循环(负责对所有与 GUI 相关的消息使用react,例如调整大小、按钮点击等...),因此在调用 mainForm.Show( ) 线程结束。
事实上 winforms 应用程序通常是这样开始的:

Application.Run(new MainForm());

在哪里,正如您在 MSDN documentation 中看到的那样, Application.Run 在当前线程中启动标准消息循环并显示表单。

如果您使用 ShowDialog() 它会起作用,因为模态窗体在内部运行它们自己的消息循环。

我不知道您要完成什么,但 ShowDialog 可能是最简单的解决方案;如果您不喜欢它,只需将您的 mainForm.Show 替换为 Application.Run(mainForm) 就可以了。

关于c# - 打开新窗口窗体窗口,立即关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21077804/

相关文章:

vb.net - 选择另一个控件时,datagridview 中的新行默认值消失

c# - 如何将图像设置为图表轴或沿图表轴设置?

c# - 如何对面板进行双重缓冲?

c# - WPF 如何轻松地在代码后面链接动画?

c# - 如何编写指定创建逻辑的接口(interface)或抽象类?

javascript - ASP.Net Javascript 代码抛出奇怪的异常(即使有注释!)

c# - 图表数据绑定(bind)到数据表 - 图表未更新

c# - 检查文本文件是否在记事本中打开

c# - 将字符串返回给有关搜索的 SQL 服务器查询

c# - 如何通过比较DateTime来判断是否已经60天?