无法处理控件 (NotifyIcon)
Unable to Dispose Control (NotifyIcon)
在我的作业申请中;我需要创建一个应用程序,我还需要在其中使用 NotifyIcon。
我遇到了一个问题,我无法理解为什么代码永远不会到达 Dispose 事件。
我正在实施 "IDisposable"; (以便能够在 NotifyIcon 上调用 Dispose)。
但是,在处理事件中添加断点后;我可以看到我无法到达它。
我真的无法理解它没有到达那里的原因。
我目前正在关注这个线程来帮助我解决这个问题:
NotifyIcon remains in Tray even after application closing but disappears on Mouse Hover
任何人都可以帮助我了解发生这种情况的原因或我错过了什么吗?
我的Class代码:
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();
}
我找到问题了。
我的问题背后的原因;实际上是分心。
我假设订阅了 FormClosing 事件,(老实说:我确定我订阅了它。我一定是做了某种回滚并错误地删除了它)。
解决方法:只需要检查事件是否被订阅。
在我的作业申请中;我需要创建一个应用程序,我还需要在其中使用 NotifyIcon。
我遇到了一个问题,我无法理解为什么代码永远不会到达 Dispose 事件。
我正在实施 "IDisposable"; (以便能够在 NotifyIcon 上调用 Dispose)。
但是,在处理事件中添加断点后;我可以看到我无法到达它。
我真的无法理解它没有到达那里的原因。
我目前正在关注这个线程来帮助我解决这个问题:
NotifyIcon remains in Tray even after application closing but disappears on Mouse Hover
任何人都可以帮助我了解发生这种情况的原因或我错过了什么吗?
我的Class代码:
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();
}
我找到问题了。
我的问题背后的原因;实际上是分心。 我假设订阅了 FormClosing 事件,(老实说:我确定我订阅了它。我一定是做了某种回滚并错误地删除了它)。
解决方法:只需要检查事件是否被订阅。