Несколько изображений NotifyIcon в области состояния задачи - PullRequest
0 голосов
/ 12 июня 2018

У меня есть приложение WPF, которое я люблю тихо запускать, когда пользователь закрывает главное окно.Я делаю это, используя NotifyIcon в области состояния задачи, и использую его как таковой в моем App.xaml.cs:

protected override void OnStartup(StartupEventArgs e)
{
    base.OnStartup(e);
    _notifyIcon = new NotifyIcon();
    _notifyIcon.DoubleClick += (sender, args) => ShowMainWindow();
    _notifyIcon.Icon = Wpf.Properties.Resources.QDrive;
    _notifyIcon.Visible = true;
    CreateContextMenu();

    new Bootstrapper().Run();

    Debug.Assert(Current.MainWindow != null, "Application.Current.MainWindow != null");
    Current.MainWindow.Closing += MainWindowOnClosing;
}

private void CreateContextMenu()
{
    _notifyIcon.ContextMenuStrip = new ContextMenuStrip();
    _notifyIcon.ContextMenuStrip.Items.Add("Open Q-Drive...").Click += (sender, args) => ShowMainWindow();
    _notifyIcon.ContextMenuStrip.Items.Add("Exit").Click += (sender, args) => ExitApplication();
}

private void ExitApplication()
{
    _isExit = true;
    Debug.Assert(Current.MainWindow != null, "Application.Current.MainWindow != null");
    Current.MainWindow.Close();
    _notifyIcon.Visible = false;
    _notifyIcon.Dispose();
    _notifyIcon = null;
}

Тем не менее, после закрытия и перезапуска приложения несколько раз во время отладки в VS2017, у меня есть нескольковидны значки, из которых все, кроме активной, исчезают при наведении мыши.Я замечаю, что это ошибка в некоторых других приложениях, которые я сам не разработал.

Как я могу предотвратить это?

1 Ответ

0 голосов
/ 12 июня 2018

NotifyIcon оставляет значок позади, если вы выходите из программы, не скрывая сначала значок.

Конечно, вы скрываете его в ExitApplication.Я подозреваю, что во время отладки вы не всегда выходите из программы, выбирая пункт «Выход» в меню, а просто останавливаете Visual Studio.Вот почему иконка-сирота осталась позади.

Это не является чем-то необычным в процессе разработки, но оно не повлияет на ваших пользователей, если они не используют диспетчер задач, чтобы принудительно остановить вашу программу.

Если это вас беспокоит, вы можете написать глобальный обработчик исключений (что-то, что вам, вероятно, следует сделать в любом случае), и в этом обработчике вы можете скрыть значок, позаботившись сначала о том, чтобы убедиться, что он все еще существует.

Конечно, если вы нарушаете исключения в Visual Studio и внезапно завершаете работу программы, даже этот глобальный обработчик исключений не будет скрывать NotifyIcon.

...