Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 正在消失的系统托盘图标_C#_Windows_Visual Studio_Desktop Application_System Tray - Fatal编程技术网

C# 正在消失的系统托盘图标

C# 正在消失的系统托盘图标,c#,windows,visual-studio,desktop-application,system-tray,C#,Windows,Visual Studio,Desktop Application,System Tray,我正在visual studio 2010中使用C#创建一个系统托盘应用程序 当应用程序启动时,我创建线程和系统托盘图标。但是,每当我将鼠标移到图标上时,图标就会消失(应用程序仍在运行),即使我单击按钮显示所有隐藏的图标,它也不会显示 但是,如果我不尝试将鼠标移到它上面,那么它将留在系统托盘中 有什么想法或经历吗 提前谢谢 谢谢你们的回答 嗯,我以前做过一些修正,尽管对那些好奇的人来说 我最初并没有使用windows窗体,这就是问题发生的时候。但是,当我将我的应用程序设置为windows窗体,

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

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

但是,如果我不尝试将鼠标移到它上面,那么它将留在系统托盘中

有什么想法或经历吗

提前谢谢


谢谢你们的回答

嗯,我以前做过一些修正,尽管对那些好奇的人来说


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

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

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


如果没有看到您的代码,就不可能对其进行进一步的注释。

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

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

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

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

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

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

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

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

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