Search code examples
c#winformsnotifyicontrayicon.net-4.7.2

Tray Icon not showing up


I have added a tray icon to my program that should show the up and have buttons for toggling certain functionality. However, the tray icon is not showing up.

I have checked that System.Windows.Forms is included, that the Application.Run() method is called after creating the tray icon, that the Visible property of the NotifyIcon object is set to true, that the Icon property is set correctly (tried several different ones, SystemIcons, my application icon, a specified file), and that the Text property is set properly.

I have looked at various SO questions & answers to no avail, it's a Windows Application targeting .NET Framework 4.7.2, it does not utilize a form if that matters.

using System;
using System.Net;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace SomethingSomething
{
    internal static class Program
    {
        static NotifyIcon trayIcon;
        [STAThread]
        static void Main()
        {
            // Start the webserver
            StartWebServer().Wait();

            // Create the tray icon
            CreateTrayIcon();

            // Needed for tray icon
            Application.Run();
        }

        static void CreateTrayIcon()
        {
            trayIcon = new NotifyIcon
            {
                Visible = true,
                Icon = SystemIcons.Information,
                Text = "Current Song" + currentSong
            };

            var menu = new ContextMenu();
            var toggleRPCMenuItem = new MenuItem("Toggle RPC", (s, e) => ToggleRPC());
            var toggleAdsMenuItem = new MenuItem("Toggle Ads", (s, e) => ToggleAds());
            var exitMenuItem = new MenuItem("Exit", (s, e) => Exit());
            menu.MenuItems.Add(toggleRPCMenuItem);
            menu.MenuItems.Add(toggleAdsMenuItem);
            menu.MenuItems.Add(exitMenuItem);
            trayIcon.ContextMenu = menu;
        }
    }
}

Solution

  • Turns out I had a method that ran before CreateTrayIcon();:

    StartWebServer().Wait();
    

    Which blocks the rest of the code.