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; 
      } 
     } 

    } 
+5

将该代码移到'Main'方法(应用程序入口点)并且根本不显示任何表单而不是退出任何内容。 – Sinatr

+0

@Sinatr你说要创建一个主?这将增加方案的起点不明确的方面吗? –

+0

你已经拥有了它......某处;)不要创建新的,使用/修改现有的。甚至有它的特殊版本:请参阅[这个答案](http://*.com/a/1179545/1997232)。 – Sinatr

你想:

Environment.Exit(0); 
+0

该命令做了什么?我现在试试看,谢谢 –

+0

@ J.Doe它杀死了进程并指定ExitCode = 0 – Steve

+0

“终止此进程并返回一个退出代码到操作系统。” - [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()无法关闭您的应用程序。

+0

当我使用Environment.Exit时,仍然加载form1:( –

+0

没关系不,它的工作感谢:) –

你不需要在窗体构造函数中使用这段代码。相反,找到你的入口点(通常在Program.cs文件中是一个静态的Main方法),并放在那里。

Application.Exit已经是一个不好的迹象 - 它表明你并不真正知道你在那个时候想要退出什么。它不工作你的情况的原因是,有没有应用程序退出,但 - 通常的方式WinForms应用程序开始看起来是这样的:

Application.Run(new Form1()); 

既然你在表单构造是,Application.Run没还没有运行,所以没有消息循环退出(这是Application.Exit所做的)。

您还可以直接访问来自入口点的命令行参数 - 它是Main方法的参数。在那里做所有的决定,并且只有当你想要真正运行GUI应用程序时,执行Application.Run。否则,只需从Main返回,并且您的应用程序将结束(前提是您没有旋转任何在该点仍然活着的前景线程)。