【问题标题】:Disappearing System Tray icons消失的系统托盘图标
【发布时间】:2011-04-16 20:41:02
【问题描述】:

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

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

但是,如果我不尝试将鼠标悬停在它上面,它就会停留在系统托盘中。

有什么想法或经验吗?

提前致谢


谢谢大家的回答。

呃,我之前做过一些修复,尽管对于那些可能好奇的人来说。

我最初没有使用 Windows 窗体,这就是问题发生的时候。但是,当我将我的应用程序设置为 windows 窗体时,只是隐藏窗体,而不是在任务栏中显示它,它就起作用了。

【问题讨论】:

  • 当您将鼠标悬停在图标上时,您确定显示图标的进程仍在运行吗?

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


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      【解决方案3】:

      如果您正在创建图标对象并让它超出范围而没有对其进行任何引用,那么下一次垃圾回收将调用它的析构函数并且会发生这种情况。

      【讨论】:

        【解决方案4】:

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

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

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-11-11
          • 1970-01-01
          • 2016-08-22
          • 1970-01-01
          • 1970-01-01
          • 2011-06-25
          • 2023-03-06
          相关资源
          最近更新 更多