1

此 WPF 程序显示一个 ContextMenu,它承载一个标有“退出”的 MenuItem,以及一个空窗口。选择“退出”应该会终止进程,但它只会关闭 Window 和 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;
    }
}
4

1 回答 1

2

当打开 ContextMenu 时,这可能是 WPF 中的一个错误。我昨天遇到了完全相同的问题。我的解决方法是:

menuItem.Click += delegate {

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

};

但在我的情况下,我在托盘(通知)图标上打开 ContextMenu,所以我没有 WPF 父级。在您的情况下,我会尝试将 ContextMenu 设为 WPF 窗口的子级或先使用 PlacementTarget 属性。

于 2012-04-08T08:55:12.833 回答