C# WinForm关闭Form1后程序未退出,返回Program.cs执行问题求助
问题原因
Application.Run(new Form1())仅负责启动窗体的消息循环,当窗体关闭时,该方法会返回,程序会继续执行后续代码,而非直接终止整个进程。- 你的代码是顺序执行逻辑:比如按住Shift打开Form1并关闭后,代码会继续执行后面的注册表检查块;若注册表无指定键,会再次触发Form1的启动,这就是你看到“回到Program.cs继续执行”的核心原因。
- 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
相关产品推荐
相关产品推荐

