2012-04-06 2 views
1

このWPFプログラムは、「終了」とラベル付けされた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(); })); 

}; 

しかし、私の場合は私がトレー上のContextMenuを開封しております、私はそれのためのWPFの親を持っていないので、アイコン(通知)を:私の回避策があります。あなたの場合、私はWPFウィンドウのContextMenu子を作成しようとするか、PlacementTargetプロパティを最初に再生します。

+0

+1。実際には、問題を隔離する前に、私のコードは 'NotifyIcon'を介して' ContextMenu'をオープンしました!あなたのコードは効果的です。ありがとうございました。私はこれがバグであることを確認する方法を知らないので、あなたの回避策が常に機能するかどうかはわかりません。すぐに受け入れられるように答えるのはちょっと残念です。 –

関連する問題