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();
        }