我有一个多线程的C#应用程序,并且它有读写锁,但是在一些计算机上会出现超时异常(无法及时获取锁),我需要强制关闭所有线程。 如何在不得到任何额外异常的情况下做到这一点?
我有一个多线程的C#应用程序,并且它有读写锁,但是在一些计算机上会出现超时异常(无法及时获取锁),我需要强制关闭所有线程。 如何在不得到任何额外异常的情况下做到这一点?
如果您想在程序出现致命错误后,不让系统显示任何异常信息就将其关闭,您可以使用以下代码:
请注意:以下内容为原文,请不要修改。
Process.GetCurrentProcess().Kill()
Environment.FailFast可能是您正在寻找的内容,但请注意其副作用:不会运行任何终结器、finally块或其他任何内容。它确实立即终止了进程。
Process.Kill()
应该是停止进程最野蛮的方式。我怀疑它调用了TerminateProcess()
Win32 API函数。 - Vilx-Environment.Exit()
听起来更优雅一些,可能是在.NET本身中实现的;或者它可能是ExitProcess()
的包装器。最后,Environment.FailFast()
似乎更像是一个调试辅助工具 - 它确实立即停止了所有用户代码,但.NET框架代码仍然会在完全终止进程之前执行一些清理工作(写入事件日志条目,发送数据到错误报告)。 - Vilx-要立即强制退出应用程序,您可以使用Environment.FailFast()
taskkill
命令,它一定会终止您的应用程序。尝试一下吧。首先添加系统引用。using System.Diagnostics;
String process = Process.GetCurrentProcess().ProcessName;
Process.Start("cmd.exe", "/c taskkill /F /IM " + process + ".exe /T");
/F
- 强制终止。/T
- 终止进程树(进程及其启动的所有其他进程)。/IM
- 映像名称或进程名称。
Environment.FailFast(int)
会尽可能快地终止你的应用程序。 - vcsjones