윈도우즈(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

Posted by six605
,