我也在使用 NotifyIcon,这有一些问题。首先,您需要为 NotifyIcon 设置一个图标,并确保您没有将其 Visibility 设置为 Visibility.Visible 以外的任何内容。
然后,NotifyIcon 只是 NotifyIcon Windows API 的一个包装器,并且有一个已知问题是它不能总是被创建。因此,当您初始化 NotifyIcon 时,它可能会因为 Windows 中的错误而引发异常(如果无法创建,WinApi 将返回 false,并且在源代码中它们会在那里引发异常)。当它这样做时,您可以在循环中重新创建 NotifyIcon 直到可以创建它。
当 NotifyIcon 不是在 app.xaml 中创建为 XAML 对象而是在代码中创建时,我还看到了一个问题,从那时起我总是在 XAML 中而不是在代码中创建它。现在我还从 CodeProject 导入了整个 NotifyIcon 项目,以便能够调试它的内部。所以现在我以这种方式创建它:
<NotifyIcon1:NotifyIcon x:Key="NotifyIcon" x:Name="notifyicon"
ToolTipText="" Visibility="Visible" IconSource="/Images/Icons/bulb.ico"/>
如果在 NotifyIcon 库的这部分代码中无法创建图标,则应该抛出异常:
/// <summary>
/// Creates the taskbar icon. This message is invoked during initialization,
/// if the taskbar is restarted, and whenever the icon is displayed.
/// </summary>
private void CreateTaskbarIcon()
{
lock (this)
{
if (!IsTaskbarIconCreated)
{
const IconDataMembers members = IconDataMembers.Message
| IconDataMembers.Icon
| IconDataMembers.Tip;
//write initial configuration
var status = Util.WriteIconData(ref iconData, NotifyCommand.Add, members);
if (!status)
{
throw new Win32Exception("Could not create icon data");
}
//set to most recent version
SetVersion();
messageSink.Version = (NotifyIconVersion) iconData.VersionOrTimeout;
IsTaskbarIconCreated = true;
}
}
}
您可以根据需要直接编辑代码,或者在出现异常时尝试重新创建通知图标。
我想这将是问题,因为它对我们来说是一样的,因为有时在启动后 Windows 还没有准备好创建图标。如果您还有其他问题,请发布您用于创建通知图标的代码和出现问题的系统(XP?64 位?)。