8

我正在开发一个 C# 项目,并希望利用 UnhandledException 事件来捕获我在项目中可能遗漏的任何异常(希望不会有任何异常,但在同一边)。

我做了很多软件,所以我想创建一个我所有项目都会使用的类库,所以我想要一个函数来完成我所有项目的所有初始化工作,而无需复制和粘贴代码到每个项目中来做同样的工作。

我想知道的是,如果我在类库中有未处理的异常事件,使用以下代码

AppDomain currentDomain = AppDomain.CurrentDomain;
            currentDomain.UnhandledException += new UnhandledExceptionEventHandler(currentDomain_UnhandledException);

未处理的异常是否仅在类库中使用,或者此事件句柄是否也会从引用类库的任何项目中执行。

感谢您的任何帮助,您可以提供。

4

2 回答 2

5

假设您的所有项目都在同一个 appdomain 中运行,这将正常工作。我们将这个确切的代码封装在一个公共 DLL 中,该 DLL 在许多应用程序之间共享。

另一个建议:如果在 Windows 窗体应用程序中使用它,您可能还想为System.Windows.Forms.Application.ThreadException添加一个处理程序。例如,当有人忘记将异常处理添加到控制事件时,这可以作为后盾。

于 2013-01-05T02:00:48.087 回答
1

可以将程序集加载到不同的应用程序域,但只要将程序集(如类库)加载到当前应用程序域,这将处理异常。

应用程序域和程序集之间的关系:

http://technet.microsoft.com/en-us/subscriptions/index/43wc4hhs(v=vs.80).aspx

例如,Assembly.LoadFile()或者Assembly.Load()将程序集加载到当前应用程序域中。

您的代码可能正在创建一个新的应用程序域:

AppDomain.CreateDomain(..),然后它可以将程序集加载到此域中,这不会由您的代码处理。

如果您在项目中引用库,它们将被加载到当前应用程序域中。

于 2013-01-05T02:04:31.913 回答