public TrayIcon(Action <object, EventArgs> exitHandler) { Instance = this; var waiter = new TaskCompletionSource <bool>(); var notifyThread = new Thread(delegate() { var contextMenu = new ContextMenu(); // Version var mnuVersion = new MenuItem($"Version v{Program.GetVersion()}") { Enabled = false }; // Exit var mnuExit = new MenuItem("Exit"); mnuExit.Click += new EventHandler(exitHandler); contextMenu.MenuItems.AddRange(new[] { mnuVersion, mnuExit }); // Tray Icon _notificationIcon = new NotifyIcon() { Icon = CreateIcon(), ContextMenu = contextMenu, Text = "Windows Terminal Quake", Visible = true }; waiter.SetResult(true); Application.Run(); }); notifyThread.Start(); waiter.Task.GetAwaiter().GetResult(); }
public TrayIcon(Action <object, EventArgs> exitHandler) { Instance = this; var waiter = new TaskCompletionSource <bool>(); var notifyThread = new Thread(delegate() { var contextMenu = new ContextMenu(); contextMenu.MenuItems.AddRange(new[] { // Version CreateVersionItem(), // Open settings file CreateOpenSettingsItem(), // Exit CreateExitItem(exitHandler) }); // Tray Icon _notificationIcon = new NotifyIcon() { Icon = CreateIcon(), ContextMenu = contextMenu, Text = "Windows Terminal Quake", Visible = true }; waiter.SetResult(true); Application.Run(); }); notifyThread.Start(); waiter.Task.GetAwaiter().GetResult(); }