相关疑难解决方法(0)

捕获控制台出口C#

我有一个包含很多线程的控制台应用程序.有些线程可以监视某些条件,如果它们是真的则终止程序.这种终止可以随时发生.

我需要一个可以在程序关闭时触发的事件,以便我可以清理所有其他线程并正确关闭所有文件句柄和连接.我不确定.NET框架中是否已经内置了一个,所以我在编写自己的框架之前就已经问过了.

我想知道是否有一个事件:

MyConsoleProgram.OnExit += CleanupBeforeExit;
Run Code Online (Sandbox Code Playgroud)

.net c# console events exit

88
推荐指数
4
解决办法
8万
查看次数

如何检测应用程序何时终止?

这是我最初的问题的后续内容,我想提出我的发现并要求更正,想法和见解.我的发现(或者更确切地说是解释)来自人们对我之前的问题的回答,阅读MSDN .NET 3.5文档和调试.NET 3.5代码.我希望这对那些想知道如何检测应用程序何时终止的人有价值.

事件:

  • System.AppDomain.CurrentDomain.ProcessExit:当进程退出时引发,例如在默认情况下AppDomain并且其他所有内容都被卸载[总执行时间仅限于3秒!].对于WPF,请System.Windows.Application.Exit改用.对于Windows窗体,请Application.Run(...)在main方法之后运行代码.

  • System.AppDomain.CurrentDomain.DomainUnload:当AppDomain默认AppDomain卸载以外时引发,例如在运行带有单元测试框架的类时(带有TestDriven.NET的MbUnit).

  • System.AppDomain.CurrentDomain.UnhandledException:(如果在默认情况下处理AppDomain:)为任何线程中的任何未处理的异常引发,无论AppDomain线程是什么开始.这意味着,这可以用作所有未处理异常的catch-all.

  • System.Windows.Application.Exit:当WPF应用程序(即默认值AppDomain)正常退出时引发.覆盖System.Windows.Application.OnExit以利用它.

  • 终结器(C#中的析构函数):当垃圾收集器释放非托管资源时运行.[总执行时间有限!].

活动顺序:

WPF应用程序:优雅退出

  1. System.Windows.Application.Exit
  2. System.AppDomain.CurrentDomain.ProcessExit
  3. 终结

WPF应用程序:未处理的异常

  1. System.AppDomain.CurrentDomain.UnhandledException

在TestDriven.NET中运行的MbUnit:通过测试(优雅退出)

  1. System.AppDomain.CurrentDomain.DomainUnload
  2. 终结

在TestDriven.NET中运行的MbUnit:测试失败(未处理的异常由MbUnit处理)

  1. AppDomain.CurrentDomain.DomainUnload
  2. 终结

问题:

  • 我的解释/发现是否正确?
  • 你知道我遗漏的更多细节吗?例如,终结者的总执行时间是多少?
  • 你知道我知道的其他事件/想法吗?
  • 有哪些事件以及它们在其他应用程序中引发的顺序,例如Windows窗体,Web服务,ASP.NET网站等?

.net c# multithreading appdomain

61
推荐指数
1
解决办法
2万
查看次数

AppDomain.CurrentDomain.ProcessExit和cleanup

当我需要在关闭应用程序之前使用Stop()函数停止后台线程时,我有简单的应用程序.问题是我的Main()函数有几个退出点(return语句)

static void Main(string[] args)
{
/// some code
return;

// some code
return;

//// etc
}
Run Code Online (Sandbox Code Playgroud)

我尝试使用AppDomain.CurrentDomain.ProcessExit作为清理的标志位置,但它永远不会被调用(至少在有后台线程时).有没有办法找出一些很好的方法来实现它?

.net c# events

5
推荐指数
1
解决办法
3639
查看次数

标签 统计

.net ×3

c# ×3

events ×2

appdomain ×1

console ×1

exit ×1

multithreading ×1