2012-04-06 2 views
1

이 WPF 프로그램은 'Exit'라는 레이블이 붙은 MenuItem을 호스팅하는 ContextMenu와 빈 창을 표시합니다. 'Exit'를 선택하면 프로세스가 종료되지만 Window 및 ContextMenu 만 닫힙니다. 나는이 프로그램을 강제 종료하려고하지 않고 끝내게된다.Application.Shutdown()이 ContextMenu에서 실패 함

Click 이벤트 처리기에서 Application.Shutdown()을 호출하면 프로그램이 종료되지 않는 이유는 무엇입니까?

using System; 
using System.Windows; 
using System.Windows.Controls; 

class MyApp : Application { 

    [STAThread] 
    public static void Main() { 
     new MyApp().Run(); 
    } 

    protected override void OnStartup(StartupEventArgs e) { 

     new Window().Show(); 

     MenuItem menuItem = new MenuItem(); 
     menuItem.Header = "Exit"; 
     menuItem.Click += delegate { Shutdown(); }; 

     ContextMenu contextMenu = new ContextMenu(); 
     contextMenu.Items.Add(menuItem); 
     contextMenu.IsOpen = true; 
    } 
} 
+0

이 대답을 참조하십시오 : http://stackoverflow.com/questions/606043/shutting-down-a-wpf-application-from-app-xaml-cs – VinayC

+0

ShutdownMode가 어떻게 설정됩니까? – Flot2011

+0

ShutdownMode가 기본값 인 OnLastWindowClose입니다. –

답변

2

이것은 아마도 ContextMenu를 여는 경우 WPF의 버그 일 것입니다. 어제 똑같은 문제가있었습니다.

menuItem.Click += delegate { 

    Dispatcher.BeginInvoke(System.Windows.Threading.DispatcherPriority.Input, 
     (Action)(() => { Shutdown(); })); 

}; 

하지만 내 경우에는 내가 그래서 그것을 위해 WPF 부모가없는 (통지) 트레이 위에 아이콘의 ContextMenu을 여는 오전 : 내 해결 방법입니다. 귀하의 경우에는 WPF 창의 ContextMenu 자식을 만들거나 먼저 PlacementTarget 속성을 사용하여 재생하려고합니다.

+0

+1. 사실, 문제를 분리하기 전에 내 코드가'NotifyIcon'을 통해'ContextMenu'를 열었습니다! 코드가 효과적으로 보인다. 고맙습니다. 이것이 버그인지 확인하는 방법을 모르므로 해결 방법이 항상 효과가 있을지 확신 할 수 없기 때문에 즉시 답변을 표시하는 것을 주저합니다. –