在我的家庭作业应用程序中,我需要创建一个应用程序,在该应用程序中还需要使用NotifyIcon。
我所面临的问题是,我无法理解为什么代码永远不会到达Dispose事件。
我正在实现"IDisposable";(为了能够在NotifyIcon上调用Dispose )。但是,在dispose事件中添加一个断点之后,我可以看到无法到达它。我真的不明白为什么它不能到达那里。
我目前正在跟踪这个线程,以帮助我处理这个控件:
NotifyIcon remains in Tray even after application closing but disappears on Mouse Hover
有人能帮我理解为什么会发生这种事吗?或者我错过了什么?
我的类代码:
private NotifyIcon trayIcon;
public void CreateTrayIcon()
{
if (trayIcon == null) { trayIcon = new NotifyIcon(); }
trayIcon.Text = "My Tray Application";
trayIcon.Icon = Properties.Resources.AppIcon;
trayIcon.Disposed += TrayIcon_Disposed;
trayIcon.Visible = true;
}
private void TrayIcon_Disposed(object sender, EventArgs e) // Unreacheable Code
{
if (trayIcon != null)
{
trayIcon.Visible = false;
trayIcon = null;
}
}
protected virtual void Dispose(bool Disposing)
{
if (Disposing)
{
trayIcon.Dispose();
}
}
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}并在主窗体上调用NotifyIcon Dispose;Form_ClosingEvent
private void Form_closing(object sender, FormClosingEventArgs e)
{
trayIcon.Dispose();
}发布于 2020-02-27 11:35:18
我发现了问题所在。
我的问题背后的原因;实际上是分散注意力。我假设订阅了FormClosing事件(老实说:我确信我已经订阅了它。我一定是做了某种回滚,并错误地把它移走了)。
解决方案:只需要检查事件是否已订阅。
https://stackoverflow.com/questions/60430400
复制相似问题