我有一个.net 3.5 C#的WinForms应用程序。 它有没有GUI因为如此,只是一个一个ContextMenu的NotifyIcon。
我试图NotifyIcon的设置为可见=假,并在Application_Exit事件进行处置,具体如下:
if (notifyIcon != null)
{
notifyIcon.Visible = false;
notifyIcon.Dispose();
}
该应用程序获取到括号内的代码,但是当它试图设置可见=假抛出空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,我只好也设置图标属性设置为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
}
}
此代码对我的作品,但我不知道你是如何保持你的应用程序还活着,所以......事不宜迟:
using System;
using System.Drawing;
using System.Windows.Forms;
static class Program
{
static System.Threading.Timer test =
new System.Threading.Timer(Ticked, null, 5000, 0);
[STAThread]
static void Main(string[] args)
{
NotifyIcon ni = new NotifyIcon();
ni.Icon = Icon.ExtractAssociatedIcon(Application.ExecutablePath);
ni.Visible = true;
Application.Run();
ni.Visible = false;
}
static void Ticked(object o) {
Application.Exit();
}
}
这是我在WPF正在做。
我结合大卫·安森的使用这种最小化到托盘示例应用程序 ,它可以让你钩了一个托盘图标,窗口(你可以有多个窗口打开)。
刚刚添加该代码的构造MinimizeToTrayInstance
。
_window.Closed += (s, e) =>
{
if (_notifyIcon != null)
{
_notifyIcon.Visible = false;
_notifyIcon.Dispose();
_notifyIcon = null;
}
};
有时Application_Exit事件可几次提出只要把NotifyIcon的= NULL; 到底
if (notifyIcon != null)
{
notifyIcon.Visible = false;
notifyIcon.Dispose();
notifyIcon = null;
}
此代码为我工作
this.Closed += (a, b) =>
{
if (notifyIcon1 != null)
{
notifyIcon1.Dispose();
notifyIcon1.Icon = null;
notifyIcon1.Visible = false;
}
};
你重写你到哪儿去初始化NotifyIcon的也配置NotifyIcon的对象的Dispose方法?
protected override void Dispose(bool disposing)
{
if (disposing)
{
notifyIcon.Dispose();
notifyIcon = null;
}
base.Dispose(disposing);
}