ApplicationShutdown
WPF 응용프로그램 종료 시나리오에 대한 샘플 입니다.
종료 시나리오는:
- 마지막 창을 닫을 경우 응용 프로그램 종료
- 메인 창을 닫을 경우 응용 프로그램 종료
- 명시적으로 Shutdown 메서드 호출을 통한 응용 프로그램 종료
아래 예제는 어플리케이션의 종료 방법을 리스트 박스의 아이템 선택에 따라 어플리케이션 종료를 설정 적용해 볼 수 있습니다.
설정 창 구성
1: <Window x:Class="ApplicationShutdown.MainWindow"
2: xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
3: xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
4: xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
5: xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
6: xmlns:local="clr-namespace:ApplicationShutdown"
7: mc:Ignorable="d"
8: Title="MainWindow" Height="350" Width="525" Loaded="MainWindow_Loaded">
9: <DockPanel>
10: <StackPanel DockPanel.Dock="Top" Orientation="Horizontal">
11: <Label HorizontalAlignment="Left">Shutdown Mode:</Label>
12: <ComboBox HorizontalAlignment="Left" Name="shutdownModelListBox" />
13: </StackPanel>
14: <StackPanel DockPanel.Dock="Top" Orientation="Horizontal">
15: <Label HorizontalAlignment="Left">Application Exit Code (for explicit shutdown):</Label>
16: <TextBox HorizontalAlignment="Left" Name="appExitCodeTextBox">0</TextBox>
17: </StackPanel>
18: <Button DockPanel.Dock="Top" Click="newWindowButton_Click">New Window</Button>
19: <Button DockPanel.Dock="Top" Click="explicitShutdownButton_Click">Shutdown Explicitly (passing Exit Code)</Button>
20: <Canvas />
21: </DockPanel>
22: </Window>
메인 창 Load 이벤트
ListboxItem을 추가 하고, 아이템 변경 시 발생하는 이벤트를 초기화 합니다.
1: private void MainWindow_Loaded(object sender, RoutedEventArgs e)
2: {
3: // UI 초기화
4: shutdownModelListBox.Items.Add("OnLastWindowClose");
5: shutdownModelListBox.Items.Add("OnExplicitShutdown");
6: shutdownModelListBox.Items.Add("OnMainWindowClose");
7: shutdownModelListBox.SelectedValue = "OnLastWindowClose";
8: shutdownModelListBox.SelectionChanged += ShutdownModelListBox_SelectionChanged;
9: // 마지막 창을 닫을 때 Application을 종료
10: Application.Current.ShutdownMode = ShutdownMode.OnLastWindowClose;
11: }
Shutdown ListBox Item 선택 변경 이벤트
현재 Application의 ShutdownMode를 변경 합니다.
1: private void ShutdownModelListBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
2: {
3: Application.Current.ShutdownMode =
4: (ShutdownMode)Enum.Parse(typeof(ShutdownMode), shutdownModelListBox.SelectedValue.ToString());
5: }
explicitShutdownButton 클릭 이벤트
Shutdown 메서드를 호출해야만 종료가 가능하며, 종료 코드를 사용자 정의하여 반환이 가능합니다. 윈도우의 기본 닫기 버튼을 이용해도 프로세스에서 종료되지 않으니 유의해야 합니다.
1: private void explicitShutdownButton_Click(object sender, RoutedEventArgs e)
2: {
3: var exitCode = 0;
4: int.TryParse(appExitCodeTextBox.Text, out exitCode);
5: Application.Current.Shutdown(exitCode);
6: }
Closing, Closed 이벤트
Closing 이벤트는 창이 종료되기 직전에 발생하는 이벤트로 사용자에게 창을 닫기 전 확인하는 작업을 하기에 적당 합니다. Closed 이벤트는 창이 닫힌 후 발생하는 이벤트로 응용 프로그램이 종료 되기 전 처리해야 하는 부분을 작성합니다.
1: private void ChidWindow_Closing(object sender, System.ComponentModel.CancelEventArgs e)
2: {
3: var result = MessageBox.Show("Allow Shutdown?", "Application Shutdown Sample",
4: MessageBoxButton.YesNo,
5: MessageBoxImage.Question);
6:
7: e.Cancel = (result == MessageBoxResult.No);
8: }
1: private void ChildWindow_Closed(object sender, EventArgs e)
2: {
3:
4: }
댓글
댓글 쓰기