阻止主窗体启动


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();,我只检查用户是否连接到互联网。现在,如果用户未连接,则会抛出异常,并显示一个消息框,要求用户AbortignoreRetry。(表单尚未加载(

现在问题来了。如果用户单击abort我希望表单永远不会加载并且应用程序完全关闭。但我不能使用this.Close();作为例外再次发生在Program.cs说:

'无法访问已释放的对象。对象名称:"Form1"。

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

那么我怎样才能防止表单本身出现在这里。我也不想处理this.Close();在"程序.cs中抛出的异常。

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

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

Environment.Exit(1);

注意:通常,最好在尝试显示表单之前检查条件。但是,由于您正在寻找一种退出应用程序的方法,因此您应该知道完全可以使用 form 构造函数中的方法事件退出应用程序Environment.Exit。但是,如果您正在寻找只是在构造函数中关闭表单,则无法在构造函数中执行此操作,您应该订阅表单Load事件并在那里关闭表单。要查看示例,请查看这篇文章。

当你做检查时,已经太晚了,因为你已经在你的表格里了。 为此,您需要在程序创建新的 Form1(( 之前.cs将支票移动到程序;

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

最新更新