NotifyIcon остается в Лотке даже после закрытия приложения, но исчезает на Парении Мыши

Существует много вопросов на НАСТОЛЬКО спрашивающем то же сомнение. Решение для этого состоит в том, чтобы установить

notifyIcon.icon = null и вызов Dispose для него в событии FormClosing.

В моем приложении нет такой формы, но не имеет Значок уведомления, который обновляет на Событиях. На создании я скрываю свою форму и делаю ShowInTaskbar свойство false. Следовательно у меня не может быть "FormClosing" или "FormClosed" события.

Если это приложение заставляет событие выходить, Оно звонит Process.GetCurrentProcess().Kill(); выходить.

Я добавил notifyIcon.icon = null а также Расположите перед уничтожением, но все еще значок остается панелью задач, пока я не нависаю мышь над ним.

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

62
задан 6 February 2013 в 11:44

5 ответов

Компоненты просто должны быть расположены в правильном порядке как это:

NotifyIcon.Icon.Dispose();

NotifyIcon.Dispose();

Добавляют это к MainWindow заключительное событие.

Hope это поможет.

7
ответ дан 31 October 2019 в 14:18

Я попробовал все их, и ни один из них не работал на меня. После размышления об этом некоторое время я понял, что приложение, создающее "воздушный шар", выходило, прежде чем это имело шанс на самом деле избавиться от воздушного шара. Я добавил некоторое время цикл незадолго до Application.Exit() содержащий Application.DoEvents() команда. Это позволило моему NotifyIcon1_BalloonTipClosed на самом деле заканчивать избавляться от значка перед выходом.

while (notifyIcon1.Visible)
{
    Application.DoEvents();
}
Application.Exit();

И подсказка закрыл метод: (Необходимо включать thisIcon.visible = false для этого для работы)

private void NotifyIcon1_BalloonTipClosed(object sender, EventArgs e)
{
    var thisIcon = (NotifyIcon)sender;
    thisIcon.Icon = null;
    thisIcon.Visible = false;
    thisIcon.Dispose();
}
1
ответ дан 31 October 2019 в 14:18

Правильный ответ был уже дан. Но необходимо также обеспечить задержку, например, с таймером. Только затем приложение может все еще удалить значок в фоновом режиме.

private System.Windows.Forms.Timer mCloseAppTimer;
private void ExitButton_Click(object sender, EventArgs e) 
{ 
    notifyIcon.Visible = false; notifyIcon.Dispose; 
    mCloseAppTimer = new System.Windows.Forms.Timer(); 
    mCloseAppTimer.Interval = 100; 
    mCloseAppTimer.Tick += new EventHandler(OnCloseAppTimerTick); 
} 
private void OnCloseAppTimerTick(object sender, EventArgs e) 
{ 
    Environment.Exit(0); // other exit codes are also possible 
}
0
ответ дан 31 October 2019 в 14:18

коды редактирования... Designer.cs как ниже кодирования.

        protected override void Dispose(bool disposing)
           {
           if (disposing )
               {
               this.notifyicon.Dispose();
               }
           base.Dispose(disposing);
           }
0
ответ дан 31 October 2019 в 14:18

Единственное решение, которое работало на меня, состояло в том, чтобы использовать событие Closed и скрыться и избавиться от значка.

icon.BalloonTipClosed += (sender, e) => { 
                                            var thisIcon = (NotifyIcon)sender;
                                            thisIcon.Visible = false;
                                            thisIcon.Dispose(); 
                                        };
14
ответ дан 31 October 2019 в 14:18

Другие вопросы по тегам:

Похожие вопросы: