gpt4 book ai didi

c# - NotifyIcon 的问题不会在 Winforms 应用程序上消失

转载 作者:可可西里 更新时间:2023-11-01 08:40:09 25 4
gpt4 key购买 nike

我有一个 .Net 3.5 C# Winforms 应用程序。它本身没有 GUI,只有一个带有 ContextMenu 的 NotifyIcon。

我尝试将 NotifyIcon 设置为 visible=false 并在 Application_Exit 事件中处理它,如下所示:

        if (notifyIcon != null)
{
notifyIcon.Visible = false;
notifyIcon.Dispose();
}

应用获取括号内的代码,但在尝试设置 Visible = false 时抛出 null ref 异常。

我在几个地方读到将它放在表单关闭事件中,但该代码从未被命中(也许因为我没有这样显示的表单?)。

我可以把这段代码放在哪里才能让它真正起作用?如果我不放入它,我会在托盘中看到烦人的挥之不去的图标,直到您将鼠标移到它上面。

干杯。

编辑

只是我注意到了一些额外的东西......

我在应用程序中使用 ClickOnce.........如果我只是通过 NotifyIcon 上的上下文菜单退出应用程序,则不会记录任何异常。

就在应用程序在此处检查升级后触发 Application_Exit 事件时..

private void CheckForUpdate()
{
EventLogger.Instance.LogEvent("Checking for Update");
if (ApplicationDeployment.IsNetworkDeployed && ApplicationDeployment.CurrentDeployment.CheckForUpdate())
{
EventLogger.Instance.LogEvent("Update available - updating");
ApplicationDeployment.CurrentDeployment.Update();
Application.Restart();
}
}

这有帮助吗?

最佳答案

在 Windows 7 上,我还必须将 Icon 属性设置为 null。否则,该图标会在应用程序关闭后保留在托盘的“隐藏图标”弹出窗口中。 HTH某人。

// put this inside the window's class constructor
Application.ApplicationExit += new EventHandler(this.OnApplicationExit);


private void OnApplicationExit(object sender, EventArgs e)
{

try
{
if (trayIcon != null)
{
trayIcon.Visible = false;
trayIcon.Icon = null; // required to make icon disappear
trayIcon.Dispose();
trayIcon = null;
}

}
catch (Exception ex)
{
// handle the error
}
}

关于c# - NotifyIcon 的问题不会在 Winforms 应用程序上消失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1067844/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com