2015-01-07 4 views
-1

나는 독립 실행 형 응용 프로그램을 개발하고 어떤 행동을 할 필요가 있어요를 종료하기 전에작업 응용 프로그램

내가 이것을 달성하기 위해 노력했습니다 .. 사용자가 시스템을 loggs 때 (정확하게 좀 URL에 대한 몇 가지 요청을 게시합니다) Application.ApplicationExitAppDomain.CurrentDomain.ProcessExit 이벤트가 있거나 소멸자가 있지만 작동하지 않는 것 같습니다.

나는 그것을하는 방법에 대한 약간의 힌트에 감사 할 것입니다. 나는 (쉽게 결과를 볼 수) 파일을 만드는이 동작을 테스트하기 위해 노력하고

[STAThread] 
static void Main() 
{ 
    ... 

    Application.EnableVisualStyles(); 
    Application.SetCompatibleTextRenderingDefault(false); 
    Application.ApplicationExit += Application_ApplicationExit; 
    AppDomain.CurrentDomain.ProcessExit += Application_ApplicationExit; 
    Application.Run(); 
} 

static void Application_ApplicationExit(object sender, EventArgs e) 
{ 
    File.Create("C:\\kod\\test5.txt"); 
} 

: 여기

내 주요 기능의 일부 조각입니다.

이번에는 더 명확 할 것입니다.

+1

* 코드가 어떻게 보이는지 * 표시하지 않으면 너무 광범위합니다. 질문을 닫지 않도록 자세한 내용을 추가하십시오. 'main' 메쏘드의 마지막 줄로하고 싶은 일을 할 수없는 이유가 있습니까? – nvoigt

+0

"user loggs off"는 많은 의미가 있지만 WinForms와 관련해서는 거의 사용되지 않습니다 ... 명확히 해 주시겠습니까? –

+0

"로그 오프"== "응용 프로그램 종료"보다 더 많은 정보가 http://stackoverflow.com/questions/10579446/capturing-application-exit-event-winforms –

답변

0

확인. 당신들의 조언을 통해 나는 만족스러운 해결책을 찾았습니다.

나는하지 작업 표시 줄의 형태로 보여주는 최소화 만든 (그래서 사용자에게 보이지 않는) 내가 WM_QUERYENDSESSIONWM_ENDSESSION 메시지에 대한 몇 가지 코드를 실행할 때의 WndProc은 오버라이드 (override).

그리고 몇 가지 코드 :

public class BlockingForm : Form 
{ 
    public delegate void SessionEnd(); 
    public event SessionEnd SessionEndEvent; 

    public BlockingForm() 
    { 
     WindowState = FormWindowState.Minimized; 
     ShowInTaskbar = false; 
    } 

    protected override void WndProc(ref Message aMessage) 
    { 
     const int WM_QUERYENDSESSION = 0x0011; 
     const int WM_ENDSESSION = 0x0016; 

     if (aMessage.Msg == WM_QUERYENDSESSION || aMessage.Msg == WM_ENDSESSION) 
     { 
      OnSessionEnd(); 
     } 

     base.WndProc(ref aMessage); 
    } 

    private void OnSessionEnd() 
    { 
     var handler = SessionEndEvent; 
     if (handler != null) handler(); 
    } 
} 

대부분 도움이 코멘트는 @Sinatr의 일이었다. 고마워.

관련 문제