WPF NotifyIcon 第一次崩溃 运行 - VisualTarget 的根视觉对象不能有父对象
WPF NotifyIcon Crash On First Run - The root Visual of a VisualTarget cannot have a parent
更新:.NET 4.5.2 似乎引入了问题。 4.5.1 或 4.5 都不会出现问题。
我有一个 st运行ge 问题,我很难调试。我们有一个基于 Philipp Sumi 制作的 NotifyIcon 构建的 WPF 应用程序。
http://www.codeproject.com/Articles/36468/WPF-NotifyIcon
http://www.hardcodet.net/wpf-notifyicon
我们正在使用来自 nugget 的版本:
<package id="Hardcodet.NotifyIcon.Wpf" version="1.0.5" targetFramework="net45" />
问题是第一次(也是第一次)应用程序是 运行,它失败并出现以下异常。将鼠标悬停在出现的系统托盘图标上很容易重新创建。在后续运行中没有问题。该应用程序没有任何已保存的状态或持久数据。我不知道第一次和后续运行之间有什么区别。然而,它第二次启动的速度要快得多。 同样的问题出现在NotifyIcon自带的无窗口示例应用程序中。
我无法确定问题的真正原因。好像是4.5.2版本的框架做了改动。我确实找到了以下解决方法。
在应用程序的开头,只需创建一个工具提示并显示它。这似乎导致事情得到正确构建。例如:
[STAThread]
static void Main()
{
ToolTip tt = new ToolTip();
tt.IsOpen = true;
tt.IsOpen = false;
...
}
我仍然想知道真正的问题是什么,所以如果有人知道请post。
我也遇到了同样的问题。不幸的是,我无法重现该行为,但我有另一个使用该库的程序,它运行良好。所以主要区别在于工作程序不仅在 XAML 部分使用了 ToolTipText 属性,而且还为 TrayToolTip 属性.
提供了一个 UIElement
<hc:TaskbarIcon.TrayToolTip>
<CustomUIElement/>
</hc:TaskbarIcon.TrayToolTip>
所以这可能是一个替代解决方法。
(抱歉所有被取消的评论,刚刚发现评论中不支持代码块)
我的解决方案是将图标删除为空。删除它解决了问题中描述的相同问题。尽管该行位于 Window_Closing 中,但应用程序在启动时崩溃了。
internal System.Windows.Forms.NotifyIcon ni = new System.Windows.Forms.NotifyIcon();
....
private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
ni.Icon = Null;
}
现在我使用以下方法隐藏 Window_Closing 上的图标:(否则图标会停留在 nitification 区域)
private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
ni.Visible = false;
}
顺便说一句:使用 "ToolTip-solution" 为我的应用程序增加了更多的 10 sek 启动时间。
更新:.NET 4.5.2 似乎引入了问题。 4.5.1 或 4.5 都不会出现问题。
我有一个 st运行ge 问题,我很难调试。我们有一个基于 Philipp Sumi 制作的 NotifyIcon 构建的 WPF 应用程序。 http://www.codeproject.com/Articles/36468/WPF-NotifyIcon http://www.hardcodet.net/wpf-notifyicon
我们正在使用来自 nugget 的版本:
<package id="Hardcodet.NotifyIcon.Wpf" version="1.0.5" targetFramework="net45" />
问题是第一次(也是第一次)应用程序是 运行,它失败并出现以下异常。将鼠标悬停在出现的系统托盘图标上很容易重新创建。在后续运行中没有问题。该应用程序没有任何已保存的状态或持久数据。我不知道第一次和后续运行之间有什么区别。然而,它第二次启动的速度要快得多。 同样的问题出现在NotifyIcon自带的无窗口示例应用程序中。
我无法确定问题的真正原因。好像是4.5.2版本的框架做了改动。我确实找到了以下解决方法。
在应用程序的开头,只需创建一个工具提示并显示它。这似乎导致事情得到正确构建。例如:
[STAThread]
static void Main()
{
ToolTip tt = new ToolTip();
tt.IsOpen = true;
tt.IsOpen = false;
...
}
我仍然想知道真正的问题是什么,所以如果有人知道请post。
我也遇到了同样的问题。不幸的是,我无法重现该行为,但我有另一个使用该库的程序,它运行良好。所以主要区别在于工作程序不仅在 XAML 部分使用了 ToolTipText 属性,而且还为 TrayToolTip 属性.
提供了一个 UIElement<hc:TaskbarIcon.TrayToolTip>
<CustomUIElement/>
</hc:TaskbarIcon.TrayToolTip>
所以这可能是一个替代解决方法。
(抱歉所有被取消的评论,刚刚发现评论中不支持代码块)
我的解决方案是将图标删除为空。删除它解决了问题中描述的相同问题。尽管该行位于 Window_Closing 中,但应用程序在启动时崩溃了。
internal System.Windows.Forms.NotifyIcon ni = new System.Windows.Forms.NotifyIcon();
....
private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
ni.Icon = Null;
}
现在我使用以下方法隐藏 Window_Closing 上的图标:(否则图标会停留在 nitification 区域)
private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
ni.Visible = false;
}
顺便说一句:使用 "ToolTip-solution" 为我的应用程序增加了更多的 10 sek 启动时间。