Application.Exit是否不关闭我的程序,有其他选择吗?
所以在我的表单构造函数中,我检查了一个参数。如果我得到两个特殊参数中的一个,那么我只想注册/取消注册我的服务器并关闭程序。我不希望表单在这些情况下加载。然而,就目前而言,以下代码已成功注册/取消注册服务器,但它并未像我希望的那样立即终止我的应用程序。其他任何命令都这样做?或者,也许有更好的方法来做我想做的事情?Application.Exit是否不关闭我的程序,有其他选择吗?
我的代码:
public Form1()
{
InitializeComponent();
instance = this;
fillMeasView();
string[] args = Environment.GetCommandLineArgs();
if (args.Length > 1)
{
switch (args[1])
{
case "register":
try
{
slikServer1.RegisterServer();
MessageBox.Show("Server registered successfully!");
}
catch(Exception ex)
{
MessageBox.Show("Error: Could not register server." + "\nAdditional Information: " + ex.Message, "Registering Server Failed", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
Application.Exit();
break;
case "unregister":
try
{
slikServer1.UnregisterServer();
MessageBox.Show("Server unregistered successfully!");
}
catch (Exception ex)
{
MessageBox.Show("Error: Could not unregister server." + "\nAdditional Information: " + ex.Message, "Unregistering Server Failed", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
Application.Exit();
break;
default:
MessageBox.Show("This is the cmd line arg:" + args[1]);
break;
}
}
}
你想:
Environment.Exit(0);
该命令做了什么?我现在试试看,谢谢 –
@ J.Doe它杀死了进程并指定ExitCode = 0 – Steve
“终止此进程并返回一个退出代码到操作系统。” - [MSDN](https://msdn.microsoft.com/en-us/library/system.environment.exit(v = vs.110).aspx) – ThePerplexedOne
您可以使用Environment.Exit(0)
。非零退出代码表示错误。
终止此过程并为底层操作系统提供指定的退出代码。这是您在使用控制台应用程序时调用的代码。
在查看文档时,与Application.Exit()
的区别变得清晰。
通知所有消息泵必须终止,然后在消息处理后关闭所有应用程序窗口。
但是要小心使用Environment.Exit()
,因为它会立即杀死进程。您可能想要调查为什么Application.Exit()
无法关闭您的应用程序。
当我使用Environment.Exit时,仍然加载form1:( –
没关系不,它的工作感谢:) –
你不需要在窗体构造函数中使用这段代码。相反,找到你的入口点(通常在Program.cs
文件中是一个静态的Main
方法),并放在那里。
Application.Exit
已经是一个不好的迹象 - 它表明你并不真正知道你在那个时候想要退出什么。它不工作你的情况的原因是,有没有应用程序退出,但 - 通常的方式WinForms应用程序开始看起来是这样的:
Application.Run(new Form1());
既然你在表单构造是,Application.Run
没还没有运行,所以没有消息循环退出(这是Application.Exit
所做的)。
您还可以直接访问来自入口点的命令行参数 - 它是Main
方法的参数。在那里做所有的决定,并且只有当你想要真正运行GUI应用程序时,执行Application.Run
。否则,只需从Main
返回,并且您的应用程序将结束(前提是您没有旋转任何在该点仍然活着的前景线程)。
将该代码移到'Main'方法(应用程序入口点)并且根本不显示任何表单而不是退出任何内容。 – Sinatr
@Sinatr你说要创建一个主?这将增加方案的起点不明确的方面吗? –
你已经拥有了它......某处;)不要创建新的,使用/修改现有的。甚至有它的特殊版本:请参阅[这个答案](http://stackoverflow.com/a/1179545/1997232)。 – Sinatr