NotifyIcon的甚至在申请截止留在纸盘中,而消失鼠标悬停(NotifyIcon remains

2019-07-19 08:22发布

有对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 = FalseFormClosing事件



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.Iconnull和处置:

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
标签: c# notifyicon