我正在尝试创建一个只有托盘图标的应用程序,不会出现在任务栏中(类似于Dropbox)。我需要创建应用程序的Windows和Mac版本,因此我尝试使用MonoMac来创建Mac前端。
在MonoMac中创建仅托盘应用程序的最佳方法是什么?
我找到的所有资源都说要做以下两件事之一: - 将
我做错了什么?在OSX中,有没有更好的方法制作一个具有上层托盘图标但没有底部dock图标的后台应用程序?
(这与SO问题非常相似,但那个问题是几年前的,从未得到完整的答案,因此我希望可能会有更完整的答案。)
在MonoMac中创建仅托盘应用程序的最佳方法是什么?
我找到的所有资源都说要做以下两件事之一: - 将
<key>LSUIElement</key><string>1</string>
添加到Info.plist
文件中。
- 在AppDelegate
类的FinishedLaunching
事件中添加以下代码:NSApplication.SharedApplication.ActivationPolicy = NSApplicationActivationPolicy.Accessory;
我已经尝试了这两种方法的所有组合,但似乎一旦我尝试实例化C# System.Timers.Timer
,图标就会重新出现在屏幕底部的dock中。我是否忽略了OSX如何处理后台应用程序的某些内容?我做错了什么?在OSX中,有没有更好的方法制作一个具有上层托盘图标但没有底部dock图标的后台应用程序?
(这与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();
}
}