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

C# WinForm关闭Form1后程序未退出,返回Program.cs执行问题求助

问题原因
  1. Application.Run(new Form1())仅负责启动窗体的消息循环,当窗体关闭时,该方法会返回,程序会继续执行后续代码,而非直接终止整个进程。
  2. 你的代码是顺序执行逻辑:比如按住Shift打开Form1并关闭后,代码会继续执行后面的注册表检查块;若注册表无指定键,会再次触发Form1的启动,这就是你看到“回到Program.cs继续执行”的核心原因。
  3. Form1中使用的Application.Exit()仅终止当前窗体的消息循环,但无法阻止Program.cs中后续代码的执行——因为此时Application.Run已经返回,代码流已经回到主程序入口。
解决办法

方案1:调整分支逻辑+强制退出进程

修改Program.cs的代码结构,确保只执行一条窗体启动路径,且启动Form1后直接终止进程:

if (Control.ModifierKeys == Keys.Shift)
{
    Application.Run(new Form1());
    Environment.Exit(0); // 直接终止整个程序进程
}
else
{
    using (var hkcu = RegistryKey.OpenBaseKey(RegistryHive.CurrentUser, RegistryView.Registry64))
    using (var key = hkcu.OpenSubKey(@"SOFTWARE\clpCopy"))
    {
        if (key == null)
        {
            Application.Run(new Form1());
            Environment.Exit(0);
        }
        else
        {
            // 此处添加注册表值验证逻辑
            Application.Run(new Form2());
        }
    }
}

方案2:在Form1关闭时直接终止进程

修改Form1的FormClosing事件处理代码,用Environment.Exit()替代Application.Exit():

private void Form1_FormClosing(Object sender, FormClosingEventArgs e)
{
    Environment.Exit(0); // 直接终止整个程序进程,无视后续代码
}
额外说明

Cancel按钮能正常关闭程序,大概率是因为按钮的DialogResult设置为Cancel,且窗体的CancelButton属性指向该按钮,触发了更彻底的退出逻辑;或者你在按钮事件中直接使用了Environment.Exit(),而非Application.Exit()。

内容的提问来源于stack exchange,提问作者DaGbyte

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 20:01:33