У меня есть приложение Windows Forms, после закрытия основной формы процесс не завершается.
Я использую ApplicationContext, потому что у меня есть докладчик, который генерирует мою основную форму.
Application.Run(new ApplicationContext(Instance.InitPresentationManager()));
У меня есть методы DestroyHandle и OnHandleDestroyed, переопределенные для целей отладки. Там я вижу, что вызывается DestroyHandle, но не OnHandleDestroyed! Это причина, по которой мой процесс все еще работает, потому что ApplicationContext внутренне регистрируется для события HandleDestroyed.
В методах DestroyHandle свойство HandleCreated даже изменяется с true на false. Я даже переопределил WndProc и вижу, что сообщение «2» не получено (оно вызывает WmDestroy в классе Control и запускает событие OnHandleDestroyed).
Как это возможно?
Примечания:
- OnHandleDestroy вызывается только в начале, когда RecreatingHandle имеет значение true
- При подключении к процессу и прерывании всех потоков основной поток все еще находится в методе Application.Run.
- Я даже подключился к профилировщику памяти, который сообщает мне, что больше нет живых экземпляров моей основной формы
- Application.Exit в основной форме Dispose работает и устраняет симптомы, но не решает саму проблему.
- После перезагрузки компьютера он некоторое время работает нормально, но со временем проблема возникает снова.
- Win 7 64 бит, VS 2010, .net 4.0