消失的系统托盘图标

时间:2010-09-24 15:37:08

标签: c# windows visual-studio desktop-application system-tray

我正在使用C#在Visual Studio 2010中创建系统托盘应用程序。

当应用程序启动时,我创建我的线程和系统托盘图标。图标显示,但是每当我将鼠标悬停在图标上时,它就会消失(应用程序仍在运行),即使我单击按钮显示所有隐藏的图标,它也不会显示。

但是,如果我没有尝试将鼠标悬停在它上面,那么它会保留在系统托盘中。

任何想法或经历?

提前致谢


感谢你们的答案。

呃,我之前做过的事情要解决,尽管那些可能很好奇的人。

我最初没有使用Windows窗体,这就是出现问题的时候。但是,当我将我的应用程序设置为Windows窗体,并且只是隐藏窗体,而不是在任务栏中显示它时,它就可以工作。

4 个答案:

答案 0 :(得分:3)

将此代码粘贴到表单类中:

    protected override void OnFormClosing(FormClosingEventArgs e) {
        notifyIcon1.Visible = false;
        base.OnFormClosing(e);
    }

这可确保图标消失而不会留在托盘中。现在在该代码上设置一个断点,找出你的表单关闭的原因。如果无法找出原因,请将堆栈跟踪复制并粘贴到您的问题中。

答案 1 :(得分:1)

这意味着托盘图标已被删除。这通常发生在进程终止但托盘停留在那里 - 这是一个Windows bug。

因此,出于某种原因,您的托盘图标可能会“崩溃”。

如果没有看到您的代码,就无法进一步发表评论。

答案 2 :(得分:1)

如果您正在创建图标对象并让它超出范围而不引用它,则下一个垃圾收集将调用它的析构函数,这将会发生。

答案 3 :(得分:0)

当Windows资源管理器重新启动时,Windows将清除通知区域中的所有图标并发送广播消息 TaskbarCreated .One必须使用该消息再次添加通知图标。

您可以使用以下代码收听活动:

UINT WM_TaskBarCreated = ::RegisterWindowMessage(L"TaskbarCreated");

并使用windowproc或MessageHandler将图标添加回通知区域。