“对象引用未设置为对象的实例”最小化时在用户控件中调用窗口的方法时?

时间:2019-03-06 09:17:26

标签: c# wpf taskbar

我有一个balloon tool tip that act as taskbar notifier。 该工具提示是用户控件类。 我的情况是:我有一个窗口,上面有一些单击方法和一个工具提示。 这种情况就像在窗口的倒数计时器方法中经过“ X”时间之后,工具提示将弹出,提示是/否按钮(您是否还在使用它?)

当我尝试在用户控件类中调用窗口的方法时,通常使用此代码

//inside tooltip user control class
 System.Windows.Application.Current.Windows.OfType<My_Window>().SingleOrDefault(x => x.IsActive).My_Window_Method();

但是,当我最小化窗口或单击未突出显示窗口的任何内容时,应用程序会告知“对象引用未设置为对象的实例”,并指向上面的相同代码。

//inside tolltip usercontrol class ( same code as above)
 private void Yes_Click(object sender, RoutedEventArgs e)
    {

        System.Windows.Application.Current.Windows.OfType<My_Window>().SingleOrDefault(x => x.IsActive).My_Window_Method();
        TaskbarIcon taskbarIcon = TaskbarIcon.GetParentTaskbarIcon(this);

        taskbarIcon.CloseBalloon();
    }

所以我的问题是:在缩小应用程序或未突出显示应用程序时,是否有解决方案可以安全地在usercontroll类内调用window的方法?谢谢

1 个答案:

答案 0 :(得分:0)

当您最小化焦点或将焦点设置为其他任何东西时,由于窗口不再具有焦点,因此isactive变为false。

https://docs.microsoft.com/en-us/dotnet/api/system.windows.window.isactive?view=netframework-4.7.2

如果没有任何条件,Singleordefault将返回null。

因此,我建议您删除未激活的支票。

System.Windows.Application.Current.Windows.OfType<My_Window>().SingleOrDefault).My_Window_Method();

但是我也建议您考虑去耦并使用pub子模式,例如mvvmlight Messenger。