Одно из моих приложений предотвращает закрытие окон, если оно работает.
Единственное место, где я подозреваю причину, может быть обработчик события 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 - простое приложение корректно закрывается, когда окна начинают закрываться.
Что еще может помешать закрытию окон? Где я должен искать в коде для устранения этой проблемы?
У меня нет основной реализации 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;
}
}
Обратите внимание: приложение может быть нормально закрыто, когда пользователь закрывает его вручную.