有对SO问同样的疑问,很多的问题。 解决方案这是设置
notifyIcon.icon = null
,并呼吁Dispose
中的FormClosing事件吧。
在我的应用程序,有没有这样的形式,但有通知图标,它可在活动更新。 在创作,我躲在我的形式,使ShowInTaskbar
财产false
。 因此,我不能有一个“的FormClosing”或“FormClosed”事件。
如果该应用程序获取事件退出,它调用Process.GetCurrentProcess().Kill();
退出。
我已经加入notifyIcon.icon = null
以及处置杀害前,但仍图标保持任务栏,直到我鼠标悬停在它。
编辑 :如果我认为这种行为是由于调用GetCurrentProcess().Kill()
有来自应用程序,它会清除所有资源,并从系统托盘中删除图标退出任何优雅的方式。
Answer 1:
您可以设置
notifyIcon1.Visible = false;
要么
notifyIcon.Icon = null;
在窗体关闭事件。
Answer 2:
这工作对我来说,唯一的解决办法是使用闭合事件,并隐藏和图标的处理。
icon.BalloonTipClosed += (sender, e) => {
var thisIcon = (NotifyIcon)sender;
thisIcon.Visible = false;
thisIcon.Dispose();
};
Answer 3:
使用notifyIcon.Visible = False
中FormClosing
事件
Answer 4:
我想这个代码。 我的东西,这是更容易。 我会写几个工具或事件。 我希望这将是对你有帮助。
当你想,当你按下退出或关闭按钮来做到这一点,请使用此代码:
private void ExitButton_Click(object sender, EventArgs e)
{
notifyIcon.Dispose;
Application.Exit(); // or this.Close();
}
当你想这样做时,形式是封闭使用此代码:
private void Form1_FormClosing(object sender, EventArgs e)
{
notifyIcon.Dispose;
Application.Exit(); // or this.Close();
}
重要的代码是这样的:
notifyIcon.Dispose;
Answer 5:
组件只是必须设置在正确的顺序是这样的:
NotifyIcon.Icon.Dispose();
NotifyIcon.Dispose();
它添加到MainWindow
关闭事件。
希望这会有所帮助。
Answer 6:
这是正常的行为,不幸的是, 这是由于Windows的工作方式。 你真的can'r做任何事情。
见问题与NotifyIcon的上WinForms应用程序不dissappearing一些建议,但没有人曾经为我工作。
还看到通知在系统托盘图标上停留的应用关闭
微软已经标明这是“不会解决”微软连接。
Answer 7:
我不认为WPF有它自己的NotifyIcon的,不是吗? 如果您使用的是第三方Harcodet.Wpf.TaskbarNotification,那就试试这个:
为了防止我的应用程序从关闭时窗关闭(在后台运行),我分开逻辑关闭窗口(命中右上角的X按钮),实际上它关闭(通过上下文菜单)。 为了使这项工作,让你的右键菜单设置_isExplicitClose
为true。 否则,它只会隐藏窗口,并继续运行。
它的作用是什么,在明确的关闭,隐藏任务栏图标和关闭前的形式。 这种方式的图标是不是挂在申请后四周是关机。
private bool _isExplicitClose;
protected override void OnClosing(System.ComponentModel.CancelEventArgs e)
{
base.OnClosing(e);
if (!_isExplicitClose)
{
e.Cancel = true;
Hide();
}
}
protected void QuitService(object sender, RoutedEventArgs e)
{
_isExplicitClose = true;
TaskbarIcon.Visibility = Visibility.Hidden;
Close();
}
Answer 8:
我可以告诉你可以简单地使用.dispose()方法解决问题,但不叫你杀的过程,而不是退出应用程序。
请参阅Application.Exit如果你已经建立了一个简单的Windows窗体应用程序别的指Environment.Exit较笼统。
Answer 9:
尝试Application.DoEvents();
设置完成后notifyIcon.Icon
到null
和处置:
notifyIcon.Icon = null;
notifyIcon.Dispose();
Application.DoEvents();
并考虑Environment.Exit(0);
代替Process.GetCurrentProcess().Kill()
Answer 10:
我想所有这些和他们没有为我工作。 思考了一段时间后,我意识到,创造了“气球”的应用程序是退出它有机会真正处置气球之前。 我添加while循环之前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();
}
Answer 11:
我有完全相同的问题,因为你。
正确的方法是发送WM_CLOSE消息的过程。
我用的是C#代码我在这篇文章中找到。
http://social.msdn.microsoft.com/Forums/vstudio/en-US/82992842-80eb-43c8-a9e6-0a6a1d19b00f/terminating-a-process-in-a-friendly-way
Answer 12:
正确的答案已经给出。 但你也必须提供一个延迟,例如用一个定时器。 只有这样,应用程序仍然可以去除背景的图标。
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
}
Answer 13:
编辑... Designer.cs的代码如下编码。
protected override void Dispose(bool disposing)
{
if (disposing )
{
this.notifyicon.Dispose();
}
base.Dispose(disposing);
}
文章来源: NotifyIcon remains in Tray even after application closing but disappears on Mouse Hover