■ AppDomain 클래스의 UnhandledException 이벤트를 사용해 예외를 처리하는 방법을 보여준다.
▶ MainWindow.xaml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
<Window x:Class="TestProject.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Width="800" Height="600" Title="AppDomain 클래스 : UnhandledException 이벤트를 사용해 예외 처리하기" FontFamily="나눔고딕코딩" FontSize="16"> <Grid> <Button Name="button" Width="100" Height="30" Content="테스트" /> </Grid> </Window> |
▶ MainWindow.xaml.cs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
using System; using System.Windows; namespace TestProject { /// <summary> /// 메인 윈도우 /// </summary> public partial class MainWindow : Window { //////////////////////////////////////////////////////////////////////////////////////////////////// Constructor ////////////////////////////////////////////////////////////////////////////////////////// Public #region 생성자 - MainWindow() /// <summary> /// 생성자 /// </summary> public MainWindow() { InitializeComponent(); this.button.Click += button_Click; } #endregion //////////////////////////////////////////////////////////////////////////////////////////////////// Method ////////////////////////////////////////////////////////////////////////////////////////// Private #region 버튼 클릭시 처리하기 - button_Click(sender, e) /// <summary> /// 버튼 클릭시 처리하기 /// </summary> /// <param name="sender">이벤트 발생자</param> /// <param name="e">이벤트 인자</param> private void button_Click(object sender, RoutedEventArgs e) { throw new NotImplementedException(); } #endregion } } |
▶ MainApplication.xaml.cs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 |
using System; using System.IO; using System.Windows; namespace TestProject { /// <summary> /// 메인 애플리케이션 /// </summary> public partial class MainApplication : Application { //////////////////////////////////////////////////////////////////////////////////////////////////// Constructor ////////////////////////////////////////////////////////////////////////////////////////// Public #region 생성자 - MainApplication() /// <summary> /// 생성자 /// </summary> public MainApplication() { AppDomain.CurrentDomain.UnhandledException += AppDomain_UnhandledException; } #endregion //////////////////////////////////////////////////////////////////////////////////////////////////// Method ////////////////////////////////////////////////////////////////////////////////////////// Private #region 앱 도메인 미처리 예외시 처리하기 - AppDomain_UnhandledException(sender, e) /// <summary> /// 앱 도메인 미처리 예외시 처리하기 /// </summary> /// <param name="sender">이벤트 발생자</param> /// <param name="e">이벤트 인자</param> private void AppDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e) { try { StreamWriter writer = new StreamWriter("error.txt"); writer.Write(e.ExceptionObject.ToString()); writer.Close(); } catch { } MessageBox.Show("미처리 예외 : " + e.ExceptionObject.ToString()); } #endregion } } |
※ 사용자에게 예외를 보고하고 애플리케이션을 종료하기 전에 예외에 대한 정보를 기록하거나 응용 프로그램의 상태에 대한 충분한 정보를 사용할 수 있는 경우 나중에 복구하기 위해 프로그램 데이터를 저장하는 용도로만 사용할 수 있다.