我有一個Windows窗體應用程序,在關閉主窗體後,進程不會退出。主窗體關閉後,應用程序進程不退出 - 使用ApplicationContext
我使用了一個ApplicationContext,因爲我有一個演示者來生成我的主表單。
Application.Run(new ApplicationContext(Instance.InitPresentationManager()));
我有方法DestroyHandle和OnHandleDestroyed重寫進行調試。 在那裏我可以看到DestroyHandle被調用,但OnHandleDestroyed不是! 這就是爲什麼我的進程仍然運行的原因,因爲ApplicationContext在內部註冊到HandleDestroyed事件。
在DestroyHandle方法中,HandleCreated屬性甚至從true更改爲false。 我甚至重寫了WndProc,並且可以看到沒有收到消息「2」(這個調用了Control類中的WmDestroy並觸發了OnHandleDestroyed事件)。
這怎麼可能?
備註:
- OnHandleDestroy只調用在剛開始的時候RecreatingHandle是真的
- 當連接到過程,並打破所有線程,主線程仍然在Application.Run方法
- 我甚至附加了一個內存分析器,它告訴我沒有我的主表單的實時實例
- Application.Exit在Dispose中主窗體工作並處理症狀,但不處理問題本身
- 計算機重新啓動後能正常工作一段時間,但最終再次
- 出現問題的Win 7 64位,VS 2010,.NET 4.0
通過使用Application.Run這一定意味着當窗體關閉時,應用程序必須退出,請參閱MSDN:http://msdn.microsoft.com/en-us/library/ms157902%28v=vs.100% 29.aspx – toATwork
終止!=退出。終止是「停止你現在正在做的事情」。退出是「完成後,你完成」 –
這是我提到我的問題。主線程仍在運行。因此該應用程序不會退出。更糟的是,似乎MSDN文檔中有一個錯誤,他們聲明Application.Run正在等待表單關閉事件。我檢查了他們正在等待句柄銷燬事件的來源 - 這在我的案例中並未解僱。 – toATwork