Я пытаюсь создать приложение, которое будет иметь только значок в трее и не отображаться на панели задач. (аналогично Dropbox )Мне нужно создать версию приложения как для Windows, так и для Mac, поэтому я попытался использовать MonoMac для создания внешнего интерфейса для Mac -.
Как лучше всего создать приложение только для лотка -в MonoMac?
Все ресурсы, которые я нашел, говорят об одном из двух:
LSUIElement 1
в файл Info.plist
.FinishedLaunching
в классе AppDelegate
:NSApplication.SharedApplication.ActivationPolicy = NSApplicationActivationPolicy.Accessory;
Я пробовал все комбинации этих двух, но кажется, что как только я пытаюсь создать экземпляр C#System.Timers.Timer
, значок снова появляется в доке в нижней части экрана. Я что-то упустил в том, как OSX обрабатывает фоновые приложения?
Что я делаю не так? Есть ли лучший способ сделать фоновое приложение со значком в верхнем трее, но без значка в нижней док-станции в OSX?
(Это очень похоже на этот SO-вопрос , но этот вопрос был задан пару лет назад, и на него никогда не было полного ответа, поэтому я надеюсь, что там может быть более полный ответ.)
Вот код, который у меня есть:
public partial class AppDelegate : NSApplicationDelegate
{
MyServiceObject currentServiceObject;
public AppDelegate () { }
public override void FinishedLaunching (NSObject notification)
{
// Construct menu that will be displayed when tray icon is clicked
var notifyMenu = new NSMenu();
var exitMenuItem = new NSMenuItem("Quit My Application",
(a,b) => { System.Environment.Exit(0); }); // Just add 'Quit' command
notifyMenu.AddItem(exitMenuItem);
// Display tray icon in upper-right-hand corner of the screen
var sItem = NSStatusBar.SystemStatusBar.CreateStatusItem(30);
sItem.Menu = notifyMenu;
sItem.Image = NSImage.FromStream(System.IO.File.OpenRead(
NSBundle.MainBundle.ResourcePath + @"/notify-icon.icns"));
sItem.HighlightMode = true;
// Remove the system tray icon from upper-right hand corner of the screen
// (works without adjusting the LSUIElement setting in Info.plist)
NSApplication.SharedApplication.ActivationPolicy =
NSApplicationActivationPolicy.Accessory;
// Start running the program -- If I comment out then no dock icon appears
currentServiceObject = new MyServiceObject();
}
}