首页 文章

消失的系统托盘图标

提问于
浏览
2

我正在使用C#在visual studio 2010中创建一个系统托盘应用程序 .

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

但是,如果我不试图将鼠标悬停在它上面,那么它会保留在系统托盘中 .

任何想法或经验?

提前致谢


谢谢你的回答 .

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

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

4 回答

  • 1

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

    您可以使用以下代码来收听事件:

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

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

  • 3

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

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

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

  • 0

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

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

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

  • 1

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

相关问题