3

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

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

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

有什么想法或经验吗?

提前致谢


谢谢你们的答案。

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

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

4

4 回答 4

3

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

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

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

于 2010-09-24T16:48:38.357 回答
1

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

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

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

于 2010-09-24T15:45:29.783 回答
1

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

于 2010-09-24T15:48:01.640 回答
0

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

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

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

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

于 2017-01-16T13:18:12.613 回答