我有一个Windows窗体应用程序,关闭主窗体后,进程不会退出。
我使用ApplicationContext,因为我有一个生成主表单的演示者。
Application.Run(new ApplicationContext(Instance.InitPresentationManager()));
我有方法DestroyHandle和OnHandleDestroyed覆盖以进行调试。 在那里我可以看到DestroyHandle被调用但是OnHandleDestroyed没有! 这就是我的进程仍在运行的原因,因为ApplicationContext在内部注册到HandleDestroyed事件。
在DestroyHandle方法中,属性HandleCreated甚至从true更改为false。 我甚至覆盖了WndProc并且可以看到没有收到消息“2”(这个在Control类中调用WmDestroy并触发OnHandleDestroyed事件)。
这怎么可能?
说明:
答案 0 :(得分:0)
问题是表单关闭,并不一定意味着应用程序应该终止它当前正在做的事情。 (想想写日志文件,整齐地关闭通信流等)。
一个帖子有一个属性IsBackground
(见http://msdn.microsoft.com/en-us/library/system.threading.thread.isbackground(v=vs.110).aspx),它有效地表示在中期操作中是否允许它被杀死。检查任何正在进行的线程,以确保它们使用适当的后台线程标记运行。
在应用程序上下文中尝试dispose方法。这是一个完全可以接受的模式和方式,说我完成了这个,去除它,允许长时间运行的线程完成。