好吧,这很简单:
Application.ThreadException和之间有什么区别AppDomain.CurrentDomain.UnhandledException?
我需要处理两者吗?
谢谢!
我想为 WinForms 应用程序中任何线程的所有未处理异常设置处理程序方法。我自己不创建任何应用程序域。
根据UnhandledException文档,我也需要UnhandledExceptionMode.ThrowException通过方法设置模式Application.SetUnhandledExceptionMode来捕获主线程的异常:
在使用 Windows 窗体的应用程序中,主应用程序线程中未处理的异常会导致引发 Application.ThreadException 事件。如果处理此事件,则默认行为是未处理的异常不会终止应用程序,尽管应用程序仍处于未知状态。在这种情况下,不会引发 UnhandledException 事件。可以通过使用应用程序配置文件或在挂接 ThreadException 事件处理程序之前使用 Application.SetUnhandledExceptionMode 方法将模式更改为 UnhandledExceptionMode.ThrowException 来更改此行为。这仅适用于主应用程序线程。UnhandledException 事件是针对其他线程中抛出的未处理异常而引发的
因此,生成的代码将如下所示:
public static void UnhandledExceptionEventHandler(object sender, UnhandledExceptionEventArgs e)
{
// ...
}
[STAThread]
static void Main(string[] args)
{
Application.SetUnhandledExceptionMode(UnhandledExceptionMode.ThrowException);
AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(UnhandledExceptionEventHandler);
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new MainForm(pathToCheck));
}
Run Code Online (Sandbox Code Playgroud)
可以吗?它会捕获来自任何线程(包括主线程、UI 线程和Task类创建的所有线程)的所有未处理的异常吗?我正确理解了文档吗?
是的,我在这里看到了这样的问题,但我不明白为什么我还应该使用以下代码:
Application.ThreadException += new
ThreadExceptionEventHandler(ErrorHandlerForm.Form1_UIThreadException);
Run Code Online (Sandbox Code Playgroud) 我正在学习分层架构,我想知道如何在这样的设计中添加日志系统.
现在让我们说我们有三层:
并假设只有更高级别的层知道下面一层的层.例如,表示层知道业务层,但不是相反.
你应该在哪里实现一般记录器类?
实施日志记录机制的好地方是什么?
在实施之后,使用这样一个系统的方法是什么?
ILogger?正如您所看到的,我对这个主题非常困惑,在我目前的工作中,没有人对企业应用程序设计/分层设计有任何了解,即使他们正在设计企业应用程序.所以任何帮助向我展示正确的方向将不胜感激.