Repository: Kyome22/RunCat_for_windows
File: RunCat365/Program.cs (C#)

Code before:
            {
                Interval = ANIMATE_TIMER_DEFAULT_INTERVAL
            };
            animateTimer.Tick += new EventHandler(AnimationTick);
            animateTimer.Start();

            cpuTimer = new FormsTimer
            {
                Interval = CPU_TIMER_DEFAULT_INTERVAL
            };
            cpuTimer.Tick += new EventHandler(CPUTick);
            cpuTimer.Start();
        }

        private static Image? GetIconImageForMenu(string title)
        {
            Theme systemTheme = GetSystemTheme();
            string prefix = systemTheme.GetString();
            string iconName = $"{prefix}_{title}_0".ToLower();
            var obj = Resources.ResourceManager.GetObject(iconName);
            return obj switch
            {
                Icon icon => icon.ToBitmap(),
                _ => null
            } ?? null;
        }

        private static ToolStripMenuItem CreateMenuFromEnum<T>(
            string title,
            Func<T, string> getTitle,
            EventHandler onClickEvent,
            Func<T, bool> isChecked
        ) where T : Enum
        {
            var items = new List<ToolStripMenuItem>();
            foreach (T value in Enum.GetValues(typeof(T)))
            {
                string entityName = getTitle(value);
                var item = new ToolStripMenuItem(entityName, GetIconImageForMenu(entityName), onClickEvent)
                {
                    Checked = isChecked(value) 
                };
                items.Add(item);
            }
            return new ToolStripMenuItem(title, null, [.. items]);
        }

        private void OnApplicationExit(object? sender, EventArgs e)
        {
            UserSettings.Default.Runner = runner.ToString();
            UserSettings.Default.Theme = manualTheme.ToString();

Review comment (suggestion):
Icons are not necessary for anything other than runners, so let's specialize them.

```suggestion
        private static Bitmap? GetRunnerThumbnailBitmap(Runner runner)
        {
            var systemTheme = GetSystemTheme();
            var iconName = $"{systemTheme.GetString()}_{runner.GetString()}_0".ToLower();
            var obj = Resources.ResourceManager.GetObject(iconName);
            return obj is Icon icon ? icon.ToBitmap() : null;
        }
```

Code after:
            {
                Interval = ANIMATE_TIMER_DEFAULT_INTERVAL
            };
            animateTimer.Tick += new EventHandler(AnimationTick);
            animateTimer.Start();

            cpuTimer = new FormsTimer
            {
                Interval = CPU_TIMER_DEFAULT_INTERVAL
            };
            cpuTimer.Tick += new EventHandler(CPUTick);
            cpuTimer.Start();
        }

        private static Bitmap? GetRunnerThumbnailBitmap(Runner runner)
        {
            var iconName = $"{Theme.Light.GetString()}_{runner.GetString()}_0".ToLower();
            var obj = Resources.ResourceManager.GetObject(iconName);
            return obj is Icon icon ? icon.ToBitmap() : null;
        }

        private static ToolStripMenuItem CreateMenuFromEnum<T>(
            string title,
            Func<T, string> getTitle,
            EventHandler onClickEvent,
            Func<T, bool> isChecked
        ) where T : Enum
        {
            var items = new List<ToolStripMenuItem>();
            foreach (T value in Enum.GetValues(typeof(T)))
            {
                string entityName = getTitle(value);
                Image? iconImage = value is Runner runner ? GetRunnerThumbnailBitmap(runner) : null;
                var item = new ToolStripMenuItem(entityName, iconImage, onClickEvent)
                {
                    Checked = isChecked(value) 
                };
                items.Add(item);
            }
            return new ToolStripMenuItem(title, null, [.. items]);
        }

        private void OnApplicationExit(object? sender, EventArgs e)
        {
            UserSettings.Default.Runner = runner.ToString();
            UserSettings.Default.Theme = manualTheme.ToString();
            UserSettings.Default.FPSMaxLimit = fpsMaxLimit.ToString();
            UserSettings.Default.Save();
        }

        private static bool IsStartupEnabled()