Environment.Exit仍无法正常退出程序

zmok8866 2016-06-17 10:25:16
在我的程序中,关闭窗体时执行 System.Environment.Exit(0);

但是,执行System.Environment.Exit(0)后,无法正常关闭程序,弹出“程序未响应”的对话框,只能手动点击对话框中的关闭程序。

Environment.Exit:立即终止当前进程,应用程序即强制退出。返回exitcode给操作系统

既然是强制退出,就算有进程在运行也不应该卡住,为何还会卡住呢?

...全文
3621 15 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
yellowhairgan1 2017-09-11
  • 打赏
  • 举报
回复
把编译模式设置为x86即可
牛顿不煽情 2017-06-16
  • 打赏
  • 举报
回复
引用 11 楼 zmok8866 的回复:
最终使用了 System.Diagnostics.Process.GetCurrentProcess().Kill();
还是这个方法霸道,其余的试了N多遍都不行。
zjhaag 2017-06-02
  • 打赏
  • 举报
回复
我的也是无法正常退出.原来是.net4.5.2的框架,项目经理让兼容xp.没办法.降低到4.0的框架. 修改了很多代码. 后台异步使用task,await等. 现在就是无法退出.不知道哪的原因. Environment.Exit(0)都不管用. 最后也是使用 System.Diagnostics.Process.GetCurrentProcess().Kill();
cheng2005 2017-03-18
  • 打赏
  • 举报
回复
为什么非要用这个方法呢,正常关闭就可以退出了啊
zmok8866 2017-03-18
  • 打赏
  • 举报
回复
最终使用了 System.Diagnostics.Process.GetCurrentProcess().Kill();
  • 打赏
  • 举报
回复
引用 2 楼 zmok8866 的回复:
[quote=引用 1 楼 liaoxing168 的回复:] 看看是否有还在执行的线程,退出前一定要手动结束所有相关线程
就算有线程在执行,这个强制退出也应该可以退出去的吧?[/quote] 手动结束进程,Environment.Exit(0)还是尽量不用吧,这是暴力退出了
俊H 2016-12-29
  • 打赏
  • 举报
回复
可能是句柄冲突
winner2050 2016-12-29
  • 打赏
  • 举报
回复
Thread.IsBackground=true 才是王道
  • 打赏
  • 举报
回复
引用 8 楼 dongxinxi 的回复:
如果是前台线程已经阻塞(卡住无响应了),确实可能退不出去,后台线程就没问题。所以还是程序设计上的问题 当然你也可以强行Process.Kill或者主线程 ExitThread,都是不推荐的
到位
  • 打赏
  • 举报
回复
如果是前台线程已经阻塞(卡住无响应了),确实可能退不出去,后台线程就没问题。所以还是程序设计上的问题 当然你也可以强行Process.Kill或者主线程 ExitThread,都是不推荐的
xian_wwq 2016-12-29
  • 打赏
  • 举报
回复
如果有工作线程,那么在创建的时候 设置Thread.IsBackground=true,即把这个线程设置为后台线程。 后台线程会随着主线程的退出而退出
  • 打赏
  • 举报
回复
引用 2 楼 zmok8866 的回复:
[quote=引用 1 楼 liaoxing168 的回复:] 看看是否有还在执行的线程,退出前一定要手动结束所有相关线程
就算有线程在执行,这个强制退出也应该可以退出去的吧?[/quote] 不会的,一定会等待线程结束
_小黑_ 2016-06-17
  • 打赏
  • 举报
回复
关闭的时候 报错了吧
zmok8866 2016-06-17
  • 打赏
  • 举报
回复
引用 1 楼 liaoxing168 的回复:
看看是否有还在执行的线程,退出前一定要手动结束所有相关线程
就算有线程在执行,这个强制退出也应该可以退出去的吧?
  • 打赏
  • 举报
回复
看看是否有还在执行的线程,退出前一定要手动结束所有相关线程
资源下载链接为: https://pan.quark.cn/s/67c535f75d4c 在C# WinForm开发中,程序无法完全退出的问题较为常见,这通常是因为程序的生命周期管理不当或后台线程未被正确处理。本文将探讨如何确保C# WinForm程序能够彻底退出。 首先,我们需要了解几种常见的退出方法及其特点: this.Close():仅关闭当前窗体,若当前窗体非主窗体,程序仍会运行。在多窗体应用中,只有所有窗体都关闭后,程序才会退出。 Application.Exit():会向消息队列发送WM_QUIT消息,关闭所有窗体。但如果程序中有非主线程(托管线程),这些线程可能仍在后台运行,导致程序未完全退出。 Application.ExitThread():仅终止调用它的线程,其他线程会继续运行。因此,若有其他线程在执行,程序不会完全退出。 System.Environment.Exit(0):这是最彻底的退出方式,会立即终止所有线程,包括主线程和其他托管线程,从而完全结束程序。通常只有在所有必要的清理工作已完成且无需等待任何线程完成时才使用此方法。 Application.Restart():用于注销当前应用程序实例并启动新实例,常用于程序更新后重新启动,而非用于退出程序。 要解决C# WinForm程序完全退出的问题,关键在于正确管理线程和窗体的生命周期。以下是一些最佳实践: 使用Application.Run(Form mainForm)启动应用程序,确保主线程与主窗体关联。 在主窗体的关闭事件中调用Application.Exit(),这样在关闭主窗体时,其他窗体也会关闭,并尝试终止非主线程。 对于后台线程,应在适当时候调用Thread.Join()或设置IsBackground = true,以便在主线程退出时,后台线程能被系统自动清理。 若有资源需要释放或清理

111,112

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧