2012-04-06 60 views
1

此WPF程序顯示一個ContextMenu,它包含一個標記爲'Exit'的MenuItem以及一個空的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 2012-04-06 04:10:54

+0

你的ShutdownMode設置爲什麼? – Flot2011 2012-04-06 04:28:43

+0

ShutdownMode是默認的OnLastWindowClose。 – 2012-04-06 04:45:58

回答

2

這可能是在打開ContextMenu時拋開WPF中的一個錯誤。我昨天也遇到了同樣的問題。我的解決方法是:

menuItem.Click += delegate { 

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

}; 

但在我的情況下,我在托盤打開文本菜單(通知)圖標,所以我沒有WPF父它。在你的情況下,我會嘗試使WPF窗口的ContextMenu孩子或首先與PlacementTarget屬性一起玩。

+0

+1。其實,在我解決問題之前,我的代碼還在'NotifyIcon'上打開了一個'ContextMenu'!你的代碼似乎有效;謝謝。我不知道如何確認這是一個錯誤,所以我不確定你的解決方法會一直工作,這讓我有點猶豫是否馬上接受了你的答案。 – 2012-04-11 03:31:16