Невозможно утилизировать элемент управления (NotifyIcon) - PullRequest
0 голосов
/ 27 февраля 2020


В моем домашнем приложении; Мне необходимо создать приложение, в котором я также должен использовать NotifyIcon.
Я столкнулся с проблемой, из-за которой я не могу понять, почему Код никогда не достигает События Уничтожения.
Я реализую «IDisposable»; (чтобы иметь возможность вызвать Dispose на NotifyIcon). Однако после добавления точки останова в событие dispose; Я вижу, что не могу этого достичь. Я не могу понять причину, по которой это не получается.

В настоящее время я следую этой теме, чтобы помочь мне с этим элементом управления:
NotifyIcon остается в трее даже после применения закрывается, но исчезает при наведении мыши

Может ли кто-нибудь помочь мне понять причину, по которой это происходит или что мне не хватает?

Код моего класса:

    private NotifyIcon trayIcon;

    public void CreateTrayIcon()
    {
        if (trayIcon == null) { trayIcon = new NotifyIcon(); }
        trayIcon.Text = "My Tray Application";
        trayIcon.Icon = Properties.Resources.AppIcon;
        trayIcon.Disposed += TrayIcon_Disposed;

        trayIcon.Visible = true;
    }

    private void TrayIcon_Disposed(object sender, EventArgs e) // Unreacheable Code
    {
        if (trayIcon != null) 
        {
            trayIcon.Visible = false;
            trayIcon = null;
        }
    }

    protected virtual void Dispose(bool Disposing)
    {
        if (Disposing)
        {
           trayIcon.Dispose();
        }
    }
    public void Dispose()
    {
        Dispose(true);
        GC.SuppressFinalize(this);
    }

и Call NotifyIcon Dispose на главной форме; Form_ClosingEvent

private void Form_closing(object sender, FormClosingEventArgs e)
{
    trayIcon.Dispose();
}

1 Ответ

0 голосов
/ 27 февраля 2020

Хорошо; Я нашел проблему.

Причина моей проблемы; был буквально отвлекаться. Я предполагал, что событие FormClosing было подписано (честно: я был уверен, что подписал его. Должно быть, я сделал какой-то откат и удалил его по ошибке).

Решение: Нужно просто проверить галочку и убедиться, что событие подписано.

...