윈도우즈(OS) 종료 및 로그오프시 발생 - SessionEnding
■ SessionEnding
1. Application 클래스의 이벤트
2. 콘솔 어플리케이션이 아닌 윈도우즈 어플리케이션으로 컴파일 한 경우에만 SessionEnding 이벤트를
받을 수 있다.
3. Application 클래스에는 SessionEnding 이벤트 발생시 OnSessionEnding 이벤트 핸들러가 동작하도록
연결되어 있다.
4. Application 클래스를 상속하는 클래스를 정의하여 OnSessionEnding 가상함수를 재정의 하면
윈도우즈가 종료되는 것을 방지하거나 특정 처리를 할 수 있다.
5. SessionEndingCancelEventArgs 객체의 Cancel 플래그를 true로 설정하면 윈도우즈 종료를 막는다.
6. ReasonSessionEnding 프로퍼티에 어떤 값을 지정하느냐에 따라 세부적인 동작 제어 가능
- ReasonSessionEnding.Logoff
- ReasonSessionEnding.Shutdown
■ 예제 소스
using System;
using System.Windows;
using System.Windows.Input;
namespace Petzold.InheritTheApp
{
public class InheritTheApp : Application
{
[STAThread]
public static void Main()
{
InheritTheApp app = new InheritTheApp();
app.Run();
}
protected override void OnStartup(StartupEventArgs args)
{
base.OnStartup(args);
Window win = new Window();
win.Title = "Inherit the App";
win.Show();
}
protected override void OnSessionEnding(SessionEndingCancelEventArgs args)
{
base.OnSessionEnding(args);
MessageBoxResult result = MessageBox.Show("Do you want to save data?",
MainWindow.Title,
MessageBoxButton.YesNoCancel,
MessageBoxImage.Question,
MessageBoxResult.Yes);
args.Cancel = (result == MessageBoxResult.Cancel);
}
}
}
출처 : 찰스 페졸드의 WPF