【发布时间】:2011-08-18 10:43:04
【问题描述】:
为什么当我启动 Windows 窗体时,我的通知图标没有显示在系统托盘中?
这就是我正在做的事情。
我有一个 Windows 服务,它启动我的托盘应用程序,它是一个 Windows 窗体应用程序(我正在使用模拟在当前用户的上下文中启动该应用程序)。
在托盘应用程序中,我正在启动一个包含通知图标的表单。
这里的问题是通知图标有时不会出现在系统托盘中,我无法找出原因。
在表单的 OnLoad 方法中,我将表单的可见属性设置为 false。
我也在做一些远程服务调用(比如ipc)。那是问题吗?
如何让我的通知图标始终出现在系统托盘中?
编辑:这是 OnLoad 函数的代码
protected override void OnLoad(System.EventArgs e)
{
this.Visible = false;
//Get some value from registry
CheckForStealthMode();
GetLoginType();
bool GetProbeStatus = false;
ServiceActivityInterface remoteMethods = null;
do
{
try
{
remoteMethods = (ServiceActivityInterface)Activator.GetObject(typeof(ServiceActivityInterface), "tcp://localhost:18800/ServiceRemoting);
ProbeStatus = remoteMethods.GetProbeStatus();
GetProbeStatus = true;
}
catch (Exception exception)
{
GetProbeStatus = false;
log.Error("Exception while getting the status of Probe:" + exception.Message);
}
finally
{
remoteMethods = null;
if (!GetProbeStatus)
{
Thread.Sleep(5000);
log.Debug("Retrying to get the probe status.");
}
}
} while (!GetProbeStatus);
}
【问题讨论】:
-
您能分享一下您的 OnLoad 方法中的代码(作为开始)吗?
-
只是托盘图标未显示,还是其他任何内容无法按预期运行?您是否检查过 Windows 事件查看器以查看应用程序事件日志(甚至安全日志)中是否报告了任何内容?
-
@Ben Scott 我已经在问题中发布了代码。
-
@Jason Down 是的,只有托盘图标没有显示所有其他功能按预期工作。
-
在旁注中,我建议用“Get”这个词定义大多数变量是一个坏主意,因为当你引用它时,它会读起来像一个方法调用,例如GetProbeStatus = true;
标签: c# winforms notifyicon