所以在我的表单构造函数中,我检查了一个参数。如果我得到两个特殊参数之一,那么我想只注册/取消注册我的服务器并关闭程序。我不希望在这些实例中加载表单。但是,因为它目前代表以下代码成功注册/取消注册服务器,但它不会像我想要的那样立即杀死我的应用程序。还有其他任何命令吗?或者也许有更好的方法来做我想做的事情?
我的代码:
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;
}
}
}
答案 0 :(得分:2)
你想:
Environment.Exit(0);
答案 1 :(得分:0)
您可以使用Environment.Exit(0)
。非零退出代码表示错误。
终止此过程并为底层操作系统提供指定的退出代码。这是使用控制台应用程序时要调用的代码。
查看文档时,与Application.Exit()
的区别变得清晰。
通知所有消息泵必须终止,然后在处理完消息后关闭所有应用程序窗口。
但要小心Environment.Exit()
,因为它立即杀死了这个过程。您可能想要调查Application.Exit()
无法关闭您的应用的原因。
答案 2 :(得分:0)
您并不希望在表单构造函数中使用此代码。相反,找到您的入口点(通常是Main
文件中的静态Program.cs
方法),并将其放在那里。
Application.Exit
已经是一个不好的迹象 - 它表明你并不真正知道你在那一点上想要退出的东西。它在你的情况下不起作用的原因是还没有应用程序退出 - winforms应用程序启动的通常方式如下所示:
Application.Run(new Form1());
由于你在表单构造函数中,Application.Run
还没有运行,所以没有消息循环退出(这是Application.Exit
所做的)。
您还可以从入口点直接访问命令行参数 - 它是Main
方法的参数。在那里做所有决定,只有当你想要实际运行GUI应用程序时,才能执行Application.Run
。否则,只需从Main
返回,您的应用程序将结束(前提是您没有启动任何在此时仍处于活动状态的前景线程。)