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,要求用户Abort
,ignore
或Retry
。 (表格尚未加载)
现在问题就在于此。如果用户点击abort
,我希望表单永不加载,应用程序完全关闭。但我不能再使用this.Close();
作为例外Program.cs
说:
'无法访问已处置的对象。对象名称:' Form1'。'
和Application.Exit();
对它没有任何影响,因为表格无论如何都会打开。
那么如何防止表单出现在这里呢。另外,我不想处理{Program.cs中this.Close();
抛出的异常。
答案 0 :(得分:1)
我希望表单永远不会加载,应用程序关闭 完全。
由于您要关闭应用程序,因此可以使用Environment.Exit
方法。它终止进程并将退出代码返回给OS。例如:
Environment.Exit(1);
注意: 一般情况下,最好在尝试显示表单之前检查条件。但是既然您正在寻找退出应用程序的方法,那么您应该知道完全有可能在窗体的构造函数中使用Environment.Exit
方法事件退出应用程序。但是如果你只想在构造函数中关闭表单,你不能在构造函数中执行它,你应该订阅表单的Load
事件并在那里关闭表单。要查看示例,请查看this post。
答案 1 :(得分:0)
当你进行检查时,已经太晚了,因为你已经在你的表格中了。 为此,您需要在创建新Form1()之前将支票移至Program.cs;
然后你可以在实际发生之前正确地中止窗口的创建。