我正在开发一个C#项目,并希望利用UnhandledException事件来捕获我在项目中可能遗漏的任何异常(希望不会有任何异常,但是在同一方面)。
我制作了相当多的软件,所以我想创建一个我的所有项目都会使用的类库,所以我希望有一个函数可以完成我所有项目的所有初始化工作而无需复制并将代码粘贴到每个项目中以执行相同的工作。
我想知道的是,如果我在类库中有使用以下代码的未处理异常事件
AppDomain currentDomain = AppDomain.CurrentDomain;
currentDomain.UnhandledException += new UnhandledExceptionEventHandler(currentDomain_UnhandledException);
未处理的异常是否仅在类库中使用,或者此事件句柄是否也会从引用类库的任何项目中执行。
感谢您提供的任何帮助。
答案 0 :(得分:5)
假设您的所有项目都在同一个应用程序域中运行,这将正常运行。我们将这个确切的代码封装在一个在众多应用程序之间共享的公共DLL中。
另一个建议:如果在Windows窗体应用程序中使用它,您可能还想为System.Windows.Forms.Application.ThreadException添加处理程序。例如,当某人忘记向控件事件添加异常处理时,这将成为一个支持。
答案 1 :(得分:1)
可以将程序集加载到不同的应用程序域中,但只要将程序集(如类库)加载到当前应用程序域中,这将处理异常。
应用程序域和程序集之间的关系:
http://technet.microsoft.com/en-us/subscriptions/index/43wc4hhs(v=vs.80).aspx
例如,Assembly.LoadFile()
或Assembly.Load()
会将程序集加载到当前的应用程序域中。
您的代码可能正在创建一个新的应用域:
AppDomain.CreateDomain(..)
,然后它可以将程序集加载到此域中,代码无法处理这些程序集。
如果您在项目中引用库,它们将被加载到当前的应用程序域中。