【发布时间】:2010-10-25 23:08:53
【问题描述】:
杀死应用程序实例的最佳方法是什么? 我知道这三种方法:
Application.Exit()Environment.Exit(0)Process.GetCurrentProcess().Kill()
谁能告诉我哪个更好,或者什么时候使用上述每种方法比较合适?
【问题讨论】:
杀死应用程序实例的最佳方法是什么? 我知道这三种方法:
Application.Exit()
Environment.Exit(0)
Process.GetCurrentProcess().Kill()
谁能告诉我哪个更好,或者什么时候使用上述每种方法比较合适?
【问题讨论】:
来自 c# 常见问题的指南:
System.Windows.Forms.Application.Exit() - 通知所有消息泵它们必须终止,然后在处理完消息后关闭所有应用程序窗口。此方法停止所有线程上所有正在运行的消息循环并关闭应用程序的所有窗口。此方法不会强制应用程序退出。 Exit 方法通常在消息循环中调用,并强制 Run 返回。要仅退出当前线程的消息循环,请调用 ExitThread。如果您正在运行 WinForms 应用程序,这是要使用的调用。作为一般准则,如果您调用了 System.Windows.Forms.Application.Run,请使用此调用。
System.Environment.Exit(exitCode) - 终止此进程并为底层操作系统提供指定的退出代码。此调用要求您具有 SecurityPermissionFlag.UnmanagedCode 权限。如果不这样做,则会发生 SecurityException 错误。如果您正在运行控制台应用程序,这是要使用的调用。
可能不建议终止进程。
【讨论】:
Process.GetCurrentProcess().Kill() 是终止应用程序的正确方法。您不希望等待发出错误订单的交易应用程序优雅地退出。你想杀了那只小狗。
如果这是一个 Windows 窗体应用程序,请使用 Application.Exit()。这将很好地关闭程序。
【讨论】:
只是一个快速的答案,当它起作用时,我总是会使用“退出”选项。这是一种更清洁的方式。
“杀死”一个进程正是这个意思,因此程序不会做它可能想做的任何清理工作(如保存配置、保存其他文件等)。除非您知道该进程是什么并且它没有任何“清理”工作要做,即使那样,使用“退出”只是更清洁。
您提到的两个“退出”选项之间似乎没有任何区别,我敢打赌,第一个只是隐式传递零值。
【讨论】:
foreach (Process proc in Process.GetProcessesByName("WindowsFormsApplication1.vshost"))
{
proc.Kill();
}
【讨论】: