终止无窗口 mac 应用程序

Terminating windowless mac application

我正在通过 Xamarin 创建我的第一个 OS X 应用程序,我有一个无窗口应用程序,所以它只是菜单栏中的一个图标,带有一个图标和一个用于关闭该应用程序的菜单。我想使用以下代码通过菜单项关闭应用程序:

public override void DidFinishLaunching (NSNotification notification)
{
    var statusItem = NSStatusBar.SystemStatusBar.CreateStatusItem(30f);
    statusItem.Image = NSImage.ImageNamed("os_logo.png");
    statusItem.HighlightMode = true;
    var menu = new NSMenu ();

    // Closing the app
    var quitItem = new NSMenuItem ("Sluit OPEN.dev", "q", delegate {
        NSApplication.SharedApplication.Terminate(NSApplication.SharedApplication);
    });
    menu.AddItem (quitItem);
    NSApplication.SharedApplication.MainMenu = menu;
    statusItem.Menu = menu;
}

但是图标不会disappear/the应用不会关闭。

有人对此有解决方案吗?

您通过在将事件委托添加到 'non-existent/hidden' SharedApplication 菜单之前将其添加到状态菜单来隐藏它。

如果只在状态菜单项上需要它:

public override void DidFinishLaunching (NSNotification notification)
{
    var statusItem = NSStatusBar.SystemStatusBar.CreateStatusItem(30f);
    statusItem.Image = NSImage.ImageNamed("madmen_icon.jpg");
    statusItem.HighlightMode = true;

    var menu = new NSMenu ();

    // Closing the app
    var quitItem = new NSMenuItem ("Sluit OPEN.dev ", "q", (s, e) => NSApplication.SharedApplication.Terminate (menu));
    menu.AddItem (quitItem);

    statusItem.Menu = menu;
}

仅供参考:如果您在应用程序和状态菜单上都需要相同的退出菜单项,则创建一个全新的 NSMenuItem 并将其父级(addItem)添加到应用程序菜单中,因为共享菜单项会导致 AppKit 崩溃:

Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Item to be inserted into menu already is in another menu'