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();
,我只检查用户是否连接到互联网。现在,如果用户未连接,则会抛出异常,并显示一个消息框,要求用户Abort
、ignore
或Retry
。(表单尚未加载(
现在问题来了。如果用户单击abort
我希望表单永远不会加载并且应用程序完全关闭。但我不能使用this.Close();
作为例外再次发生在Program.cs
说:
'无法访问已释放的对象。对象名称:"Form1"。
并且Application.Exit();
对它没有任何影响,因为无论如何表单都会打开。
那么我怎样才能防止表单本身出现在这里。我也不想处理this.Close();
在"程序.cs中抛出的异常。
我希望表单永远不会加载并且应用程序关闭 完全。
由于您要关闭应用程序,因此可以使用Environment.Exit
方法。它终止进程并向操作系统返回退出代码。例如:
Environment.Exit(1);
注意:通常,最好在尝试显示表单之前检查条件。但是,由于您正在寻找一种退出应用程序的方法,因此您应该知道完全可以使用 form 构造函数中的方法事件退出应用程序Environment.Exit
。但是,如果您正在寻找只是在构造函数中关闭表单,则无法在构造函数中执行此操作,您应该订阅表单Load
事件并在那里关闭表单。要查看示例,请查看这篇文章。
当你做检查时,已经太晚了,因为你已经在你的表格里了。 为此,您需要在程序创建新的 Form1(( 之前.cs将支票移动到程序;
然后,您可以在窗口实际发生之前正确中止窗口的创建。