窗口关闭错误或e.cancel=false,但它不会完全关闭
本文关键字:错误 cancel 窗口 false | 更新日期: 2023-09-27 18:24:50
经过2个多小时的寻找,当我关上窗户时,为什么我的血腥过程不会退出。我最终发现这是主窗口中的问题(而不是线程中的问题,因为这可能也是问题所在)!但我仍然不知道它为什么会出错。
因此,这段代码使它成为错误:
private void Window_Closing(object sender, CancelEventArgs e)
{
try
{
MessageBox.Show(e.Cancel.ToString()); // False always
if (formcontroler.formchampinfo != null) // THIS IS NULL so it won t go into this IF
{
formcontroler.formchampinfo.Close(); // never gets here so it doesn t matter what this do right ?
}
MessageBox.Show(e.Cancel.ToString()); // always false, just to check or it would get to this part tbh
}
catch (Exception ex)
{
throw (ex); // never gets thrown
}
}
这(对我来说)真的很奇怪!因为它到达了第二个消息框,e.cancel=FALSE,所以它不应该取消它,只关闭它,进程应该被终止(Visual studio应该停止调试)。
不管怎样,它不会停止。它只是让这个过程保持活力,我不知道为什么,如果我去掉中间的If,或者用一个更简单的替换它,比如:
private void Window_Closing(object sender, CancelEventArgs e)
{
try
{
MessageBox.Show(e.Cancel.ToString()); // False always
if (true == true) // just To test ofc
{
int lol = 5;
lol++;
}
MessageBox.Show(e.Cancel.ToString()); // always false, just to check or it would get to this part tbh
}
catch (Exception ex)
{
throw (ex); // never gets thrown
}
}
然后它工作了,程序像它应该的那样退出(进程被终止,Visual studio停止调试。
我认为应该有一些侧码
class formcontroler
{
public static frmchampinfo formchampinfo;
}
frmchampinfo是一个窗口,但我加载或解密了它(比如formchampinfo=new frmchaminfo();)这是一个bug还是这里发生了什么?我真的不明白为什么它在我的代码中没有完全关闭。
解决了对不起,我要到7小时才能回答,但后来我睡着了。(因为我还没有100个代表)
好吧,所以在看得越来越深之后,我发现IF语句在我的formcontroller类中创建了另一个表单(很抱歉,我没有提供完整的代码,所以你无法理解):
class formcontroler
{
public static frmchampinfo formchampinfo;
public static Window activeform;
public static frmlog formlog = new frmlog();
//... more code blabla
}
表单日志在这里"生成"。如果我在代码中添加formcontroller.formlog.close(),那么它就可以完全关闭。
private void Window_Closing(object sender, CancelEventArgs e)
{
try
{
MessageBox.Show(e.Cancel.ToString()); // False always
if (formcontroler.formchampinfo != null) // THIS IS NULL so it won t go into this IF
{
formcontroler.formchampinfo.Close(); // never gets here so it doesn t matter what this do right ?
}
formcontroler.formlog.Close(); // THIS FIXED IT... lame sorry for all your time. HoweveR I have learned something hope you did too.
MessageBox.Show(e.Cancel.ToString()); // always false, just to check or it would get to this part tbh
}
catch (Exception ex)
{
throw (ex); // never gets thrown
}
}
检查应用程序类的ShutdownMode
是否设置为OnMainWindowClose
。
您还可以通过以下方式显式关闭应用程序:
Application.Current.Shutdown();