我的一个应用程序阻止Windows在运行时关闭。
唯一让我怀疑原因的地方是FormClosing事件处理程序,这是非常标准的:
编辑:删除此处理程序根本不会改变情况,因此原因在其他地方。
private void MainForm_FormClosing(object sender, FormClosingEventArgs e)
{
if (e.CloseReason != CloseReason.UserClosing)
{
StopAllThreads();
//let close
return;
}
//ask user whether he wants to save his work
}
我无法用仅包含此FormClosing处理程序的最简单的应用程序来重现这一点-当Windows开始关闭时,简单应用程序将正确关闭。
还有什么可以阻止Windows关闭?我应该在哪里查找代码来调试这个问题?
我的主窗体中没有自定义wndproc实现。这是.NET 2.0应用程序。
当我在调试器中运行应用程序并启动关机时,我只得到“这个程序在短时间内阻止Windows关机”(Windows7)。然后,Windows关闭Visual Studio,Visual Studio关闭调试器,调试器关闭正在调试的应用程序。
编辑:StopAllThreads方法
public static void StopAllThreads()
{
lock (syncLock)
{
foreach (IStop stoppable in stoppables)
{
try
{
stoppable.Stop(); //stops a running thread by setting a volatile boolean flag
}
catch (Exception ex)
{
Debug.Fail("Error stopping a stoppable instance: " + ex.ToString());
}
}
stoppables.Clear();
disposed = true;
}
}
请注意:当用户手动关闭应用程序时,应用程序可以正常关闭。