经过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是一个窗口,但是atm我加载它或者声明它(比如formchampinfo = new frmchaminfo();) 这是一个错误还是这里发生了什么?我真的不明白为什么它不会完全关闭我的代码。
已经解决了抱歉,直到7个小时我都无法接听,但后来我睡着了。(因为我还没有100名代表)
Oke所以在看得越来越深,我发现IF语句在我的formcontroller类中创建了另一个表单(抱歉,我没有提供完整的代码,所以你可以想出来):
class formcontroler
{
public static frmchampinfo formchampinfo;
public static Window activeform;
public static frmlog formlog = new frmlog();
//... more code blabla
}
表格日志“在这里制作”。如果我将codecontroller.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
}
}
答案 0 :(得分:2)
检查App类的ShutdownMode
是否设置为OnMainWindowClose
。
您还可以通过以下方式明确关闭应用程序:
Application.Current.Shutdown();