Application.Exit是不是关闭我的程序,任何替代方案?

时间:2016-11-30 15:02:22

标签: c# winforms command-line-arguments exit kill-process

所以在我的表单构造函数中,我检查了一个参数。如果我得到两个特殊参数之一,那么我想只注册/取消注册我的服务器并关闭程序。我不希望在这些实例中加载表单。但是,因为它目前代表以下代码成功注册/取消注册服务器,但它不会像我想要的那样立即杀死我的应用程序。还有其他任何命令吗?或者也许有更好的方法来做我想做的事情?

我的代码:

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

    }

3 个答案:

答案 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返回,您的应用程序将结束(前提是您没有启动任何在此时仍处于活动状态的前景线程。)