防止主窗体启动

时间:2018-05-18 18:49:08

标签: c# .net forms winforms

public Form1()
{

InitializeComponent();
Update_current_data();  

}

private void Update_current_data()
{
    try
    {
        //...
        //...
        //...
    }
    catch
    {
        switch(MessageBox.Show("You are not connected to a WiFi or your IP address is invalid. The data processes IS UTTER CRAP.",
            "Connection Error", MessageBoxButtons.AbortRetryIgnore, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1))
        {
            case DialogResult.Abort:
                this.Close();
                Application.Exit();
                break;
            case DialogResult.Ignore:
                break;
            case DialogResult.Retry:Update_current_data();
                break;
        }

    }
}

好的,所以即使在表单加载之前调用了Update_current_data();,我也只是在这个时候检查用户是否连接到了互联网。现在,如果用户未连接,则抛出异常并显示MessageBox,要求用户AbortignoreRetry。 (表格尚未加载)

现在问题就在于此。如果用户点击abort,我希望表单永不加载,应用程序完全关闭。但我不能再使用this.Close();作为例外Program.cs说:

  

'无法访问已处置的对象。对象名称:' Form1'。'

Application.Exit();对它没有任何影响,因为表格无论如何都会打开。

那么如何防止表单出现在这里呢。另外,我不想处理{Program.cs中this.Close();抛出的异常。

2 个答案:

答案 0 :(得分:1)

  

我希望表单永远不会加载,应用程序关闭   完全。

由于您要关闭应用程序,因此可以使用Environment.Exit方法。它终止进程并将退出代码返回给OS。例如:

Environment.Exit(1);

注意: 一般情况下,最好在尝试显示表单之前检查条件。但是既然您正在寻找退出应用程序的方法,那么您应该知道完全有可能在窗体的构造函数中使用Environment.Exit方法事件退出应用程序。但是如果你只想在构造函数中关闭表单,你不能在构造函数中执行它,你应该订阅表单的Load事件并在那里关闭表单。要查看示例,请查看this post

答案 1 :(得分:0)

当你进行检查时,已经太晚了,因为你已经在你的表格中了。 为此,您需要在创建新Form1()之前将支票移至Program.cs;

然后你可以在实际发生之前正确地中止窗口的创建。