Существует много вопросов на НАСТОЛЬКО спрашивающем то же сомнение. Решение для этого состоит в том, чтобы установить
notifyIcon.icon = null
и вызов Dispose
для него в событии FormClosing.
В моем приложении нет такой формы, но не имеет Значок уведомления, который обновляет на Событиях. На создании я скрываю свою форму и делаю ShowInTaskbar
свойство false
. Следовательно у меня не может быть "FormClosing" или "FormClosed" события.
Если это приложение заставляет событие выходить, Оно звонит Process.GetCurrentProcess().Kill();
выходить.
Я добавил notifyIcon.icon = null
а также Расположите перед уничтожением, но все еще значок остается панелью задач, пока я не нависаю мышь над ним.
Править: Если я предполагаю, что это поведение происходит из-за вызова GetCurrentProcess().Kill()
, Есть ли любой изящный способ выйти из приложения, которое очистит все ресурсы и удалит значок из системного лотка.
Компоненты просто должны быть расположены в правильном порядке как это:
NotifyIcon.Icon.Dispose();
NotifyIcon.Dispose();
Добавляют это к MainWindow
заключительное событие.
Hope это поможет.
Я попробовал все их, и ни один из них не работал на меня. После размышления об этом некоторое время я понял, что приложение, создающее "воздушный шар", выходило, прежде чем это имело шанс на самом деле избавиться от воздушного шара. Я добавил некоторое время цикл незадолго до 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();
}
Правильный ответ был уже дан. Но необходимо также обеспечить задержку, например, с таймером. Только затем приложение может все еще удалить значок в фоновом режиме.
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
}
коды редактирования... Designer.cs как ниже кодирования.
protected override void Dispose(bool disposing)
{
if (disposing )
{
this.notifyicon.Dispose();
}
base.Dispose(disposing);
}
Единственное решение, которое работало на меня, состояло в том, чтобы использовать событие Closed и скрыться и избавиться от значка.
icon.BalloonTipClosed += (sender, e) => {
var thisIcon = (NotifyIcon)sender;
thisIcon.Visible = false;
thisIcon.Dispose();
};