我的一个应用程序会阻止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关闭”(Windows 7)一段时间。 Windows然后关闭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;
}
}
请注意:当用户手动关闭应用程序时,可以正常关闭应用程序。
答案 0 :(得分:3)
问题解决了:其中一个子表单覆盖了OnClosing
,代码如下:
protected override void OnClosing(CancelEventArgs e)
{
e.Cancel = true;
this.Hide();
}
答案 1 :(得分:1)
你是否已经完成了这段代码,看看它是通过执行它还是在某个地方被卡住了?可能由于某种原因,锁无法锁定syncLock并等待。