本指南演示了如何有效管理 .NET 控制台应用程序中未处理的异常。 与 GUI 或 Web 应用程序不同,控制台应用程序需要使用 AppDomain.CurrentDomain
对象的稍微不同的方法。
将事件处理程序附加到 UnhandledException
事件的常用方法(如下所示)在控制台应用程序中经常失败:
<code class="language-csharp">AppDomain currentDomain = AppDomain.CurrentDomain; currentDomain.UnhandledException += new UnhandledExceptionEventHandler(MyExceptionHandler);</code>
这是因为 AppDomain
无法立即可用。 解决方案是使用 C# 中的 =
运算符直接附加处理程序:
<code class="language-csharp">AppDomain.CurrentDomain.UnhandledException += MyExceptionHandler;</code>
这可确保处理程序正确注册。 这是一个演示异常捕获的示例:
<code class="language-csharp">static void Main(string[] args) { AppDomain.CurrentDomain.UnhandledException += UnhandledExceptionTrapper; throw new Exception("Application Error!"); } static void UnhandledExceptionTrapper(object sender, UnhandledExceptionEventArgs e) { Console.WriteLine(e.ExceptionObject.ToString()); Console.WriteLine("An unexpected error occurred. Press Enter to exit."); Console.ReadLine(); Environment.Exit(1); }</code>
此代码注册 UnhandledExceptionTrapper
方法。当发生未处理的异常时,此方法会记录异常详细信息并允许用户在应用程序终止之前确认错误。
重要提示:此方法不会捕获 JIT 编译期间引发的异常(例如类型加载或文件加载错误)。为了解决这些问题,请采用“延迟抖动”策略。 这涉及到在单独的方法中隔离潜在有问题的代码并使用 [MethodImpl(MethodImplOptions.NoInlining)]
属性对其进行修饰。
以上是如何有效处理.NET控制台应用程序中未处理的异常?的详细内容。更多信息请关注PHP中文网其他相关文章!