我正在使用C#在Visual Studio 2010中创建系统托盘应用程序。
当应用程序启动时,我创建我的线程和系统托盘图标。图标显示,但是每当我将鼠标悬停在图标上时,它就会消失(应用程序仍在运行),即使我单击按钮显示所有隐藏的图标,它也不会显示。
但是,如果我没有尝试将鼠标悬停在它上面,那么它会保留在系统托盘中。
任何想法或经历?
提前致谢
感谢你们的答案。
呃,我之前做过的事情要解决,尽管那些可能很好奇的人。
我最初没有使用Windows窗体,这就是出现问题的时候。但是,当我将我的应用程序设置为Windows窗体,并且只是隐藏窗体,而不是在任务栏中显示它时,它就可以工作。
答案 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将图标添加回通知区域。