2009-03-03 9 views
31

현재 App.xaml.cs에서 명령 줄 인수 처리를 수행하는 WPF 응용 프로그램을 작성 중입니다. Startup 이벤트가 권장되는 방법 인 것처럼 보이기 때문에 필요합니다. 그 논쟁에). WPF에서 Application.Current.Shutdown() 또는이 경우 (현재 응용 프로그램 개체에있는대로) this.Shutdown()으로 수행해야하는 그 시점에서 이미 프로그램을 끝내고 자하는 인수를 기반으로합니다.App.xaml.cs에서 WPF 응용 프로그램 종료

유일한 문제는 제대로 작동하지 않는 것입니다. Shutdown() 라인을 실행 한 후에도 디버거와 코드를 단계별로 실행 했으므로 나중에 응용 프로그램이 오래 지속되지 않을 것으로 예상했기 때문에이 메서드에서 오류가 발생합니다. 또한 XAML의 StartupUri 특성에서 선언 된 기본 창은 여전히로드됩니다.

나는 그 방법에 대한 문서를 확인한 결과, Application.Startup 또는 Application 중에는 사용하지 말 것을 말한 것을 발견하지 못했습니다.

그래서, 그 시점에서 프로그램을 종료하는 올바른 방법은 무엇입니까? 이자형. Application 개체의 Startup 이벤트 처리기?

+1

무엇이 오류입니까? 질문을 업데이트하십시오. –

+0

간단하고 작동 가능한 대답은 [Here] (http://stackoverflow.com/a/6602102/2342414)를 클릭하십시오. – benshabatnoam

답변

46

먼저 App.xaml에서 StartupUri 속성을 제거하고 다음 사용하면 다음을 당신이하게 만들 필요가 MainWindow를 사용하여 응용 프로그램에 대한 app.xaml에서 StartupUri를 제거하면

protected override void OnStartup(StartupEventArgs e) 
    { 
     base.OnStartup(e); 

     bool doShutDown = ...; 

     if (doShutDown) 
     { 
      Shutdown(1); 
      return; 
     } 
     else 
     { 
      this.StartupUri = new Uri("Window1.xaml", UriKind.Relative); 
     } 
    } 
+0

여전히 올바르게 작동하지 않습니다. ( 특히 주 창 생성자에서 NullReferenceExceptions이 발생합니다. 하지만 쉽게 이해할 수는 있지만 StartupUri에서 참조하는 창을 인스턴스화하지 않고 응용 프로그램을 종료해야합니다. – Joey

+4

기본 창을 만드는 것을 피할 수있는 방법을 보여주기 위해 내 대답이 변경되었습니다. –

+1

감사합니다. 지금은 작동하지만, 응용 프로그램이 이미 종료되었는지 여부에 관계없이 StartupUri가 항상로드된다는 것은 조금 비현실적입니다. – Joey

8

을 OnStartup 메서드를 호출하면 MainWindow가 닫힐 때 응용 프로그램이 종료되지 않습니다.

@Frank Schwieterman이 줄을 따라 무엇인가가 콘솔 창 문제를 해결하는 데 도움이 될 수 있습니다.

+1

생명의 은인! 감사! – Pascal

+0

IMNSHO :이 질문에 대한 정답입니다 ... –

+0

이 페이지는 WPF 시작 및 종료 절차를 매우 자세하게 설명합니다 ... http://www.blackwasp.co.uk/WPFStartupShutdown.aspx –