You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在MainWinForm加载完成后关闭无模式的frmStartup窗口

如何在MainWinForm加载完成后关闭无模式的frmStartup窗口

这个问题我之前也碰到过,你当前的写法存在一个关键问题:Application.Run(new MainWinForm())是阻塞调用,它会一直运行直到主窗口被关闭,才会继续执行后面的代码。所以你把frmStartup.Close()放在它后面,完全达不到“主窗口加载完成就关闭启动窗口”的效果。

下面给你两个简单可行的解决方案:

方案一:通过主窗口的Load事件关闭启动窗口

这种方式直接利用WinForm的Load事件(主窗口加载完成后触发),同时通过构造函数把启动窗口的引用传递给主窗口,确保能正确访问并关闭它:

修改Main方法:

static void Main()
{
    Application.EnableVisualStyles();
    Application.SetCompatibleTextRenderingDefault(false);

    Startup frmStartup = new Startup();
    frmStartup.Show();
    frmStartup.TopMost = true;

    // 创建主窗口时传入启动窗口的引用
    MainWinForm mainForm = new MainWinForm(frmStartup);
    Application.Run(mainForm);
}

修改MainWinForm类:

public class MainWinForm : Form
{
    private readonly Startup _startupForm;

    // 通过构造函数接收启动窗口引用
    public MainWinForm(Startup startupForm)
    {
        _startupForm = startupForm;
        // 订阅Load事件
        this.Load += MainWinForm_Load;
    }

    private void MainWinForm_Load(object sender, EventArgs e)
    {
        // 主窗口加载完成后,关闭启动窗口(先判断是否已释放)
        if (_startupForm != null && !_startupForm.IsDisposed)
        {
            _startupForm.Close();
        }
    }
}

方案二:使用匿名方法订阅Load事件(更简洁)

如果你不想修改主窗口的构造函数,也可以在Main方法里直接用匿名方法绑定主窗口的Load事件,这样更简洁:

static void Main()
{
    Application.EnableVisualStyles();
    Application.SetCompatibleTextRenderingDefault(false);

    Startup frmStartup = new Startup();
    frmStartup.Show();
    frmStartup.TopMost = true;

    MainWinForm mainForm = new MainWinForm();
    // 直接绑定Load事件,触发时关闭启动窗口
    mainForm.Load += (sender, e) => 
    {
        if (!frmStartup.IsDisposed)
        {
            frmStartup.Close();
        }
    };

    Application.Run(mainForm);
}

额外提醒:

不要用Thread.Sleep()这种固定延迟的方式来模拟启动窗口的显示,因为不同机器的加载速度不一样,延迟时间很难设置得恰到好处——有的机器主窗口加载快,用户会看到启动窗口提前关闭;有的机器加载慢,延迟到了主窗口还没好,体验都不好。上面的两种方案都是主窗口真正加载完成后才关闭启动窗口,是更可靠的做法。

备注:内容来源于stack exchange,提问作者John Wang

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.22 15:39:51