【发布时间】:2010-11-25 05:17:15
【问题描述】:
这是对我的initial question 的跟进,我想介绍我的发现并寻求更正、想法和见解。我的发现(或者更确切地说是解释)来自人们对我之前的问题的回答,即阅读 MSDN .NET 3.5 文档和调试 .NET 3.5 代码。我希望这对像我一样想知道如何检测应用程序何时终止的人来说是有价值的。
活动:
System.AppDomain.CurrentDomain.ProcessExit:进程退出时引发,例如在默认AppDomain之后,其他所有内容都已卸载 [总执行时间仅限于 3 秒!]。对于 WPF,请改用System.Windows.Application.Exit。对于 Windows 窗体,在 main 方法中运行Application.Run(...)之后的代码。System.AppDomain.CurrentDomain.DomainUnload:在卸载默认AppDomain以外的AppDomain时引发,例如使用单元测试框架(MbUnit 和 TestDriven.NET)运行类时。System.AppDomain.CurrentDomain.UnhandledException: (如果在默认情况下处理AppDomain:) 为任何线程中的任何未处理异常引发,无论线程启动于什么AppDomain。这意味着,这可以用作捕获-all 表示所有未处理的异常。System.Windows.Application.Exit:当 WPF 应用程序(即默认的AppDomain)正常退出时引发。覆盖System.Windows.Application.OnExit以利用它。终结器(C# 中的析构函数):在垃圾收集器释放非托管资源时运行。 [总执行时间有限!]。
事件顺序:
WPF 应用程序:优雅退出
System.Windows.Application.ExitSystem.AppDomain.CurrentDomain.ProcessExit- 终结者
WPF 应用程序:未处理的异常
System.AppDomain.CurrentDomain.UnhandledException
在 TestDriven.NET 中运行的 MbUnit:通过测试(优雅退出)
System.AppDomain.CurrentDomain.DomainUnload- 终结者
在 TestDriven.NET 中运行的 MbUnit:测试失败(未处理的异常由 MbUnit 处理)
AppDomain.CurrentDomain.DomainUnload- 终结者
问题:
- 我的解释/发现是否正确?
- 你知道我有更多的细节吗 被排除在外了吗?例如。总数是多少 终结器的执行时间?
- 你知道其他事件吗/ 我知道哪些想法?
- 存在哪些事件以及它们在其他应用程序中引发的顺序是什么,例如Windows 窗体、Web 服务、ASP.NET 网站等?
【问题讨论】:
标签: c# .net multithreading appdomain