.NET 콘솔 애플리케이션의 전역 예외 처리
콘솔 애플리케이션에도 처리되지 않은 예외를 처리하는 메커니즘이 필요합니다. ASP.NET 응용 프로그램은 global.asax를 사용할 수 있고 Windows 응용 프로그램/서비스는 AppDomain의 UnhandledException 이벤트 처리기를 사용할 수 있지만 콘솔 응용 프로그램은 약간 다른 접근 방식을 취합니다.
콘솔 애플리케이션용 솔루션
.NET에서 콘솔 애플리케이션에 대한 전역 예외 처리기를 정의하는 올바른 방법은 AppDomain 클래스의 UnhandledException 이벤트를 사용하는 것입니다.
<code class="language-csharp">AppDomain currentDomain = AppDomain.CurrentDomain; currentDomain.UnhandledException += MyExceptionHandler;</code>
이는 .NET 2.0 이상에서 예상대로 작동합니다.
VB.NET 개발자를 위한 지침
VB.NET에서는 currentDomain보다 먼저 "AddHandler" 키워드를 사용해야 합니다. 그렇지 않으면 UnhandledException 이벤트가 IntelliSense에 표시되지 않습니다. 구문의 차이는 VB.NET과 C#이 이벤트 처리를 처리하는 방식에서 비롯됩니다.
예
다음은 C#을 사용하는 콘솔 애플리케이션의 전역 예외 처리 예입니다.
<code class="language-csharp">using System; class Program { static void Main(string[] args) { AppDomain.CurrentDomain.UnhandledException += UnhandledExceptionTrapper; throw new Exception("发生异常"); } static void UnhandledExceptionTrapper(object sender, UnhandledExceptionEventArgs e) { Console.WriteLine(e.ExceptionObject.ToString()); Console.WriteLine("按 Enter 键继续"); Console.ReadLine(); Environment.Exit(1); } }</code>
제한사항
이 접근 방식은 Main() 메서드 실행이 시작되기 전에 JIT 컴파일러에서 생성된 유형 및 파일 로드 예외를 포착할 수 없다는 점에 유의하는 것이 중요합니다. 이러한 예외를 포착하려면 JIT 컴파일러를 연기하고 위험한 코드를 별도의 메서드로 이동하고 [MethodImpl(MethodImplOptions.NoInlining)] 특성을 적용해야 합니다.
위 내용은 .NET 콘솔 애플리케이션에서 글로벌 예외 처리기를 구현하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!