【问题标题】:how to get count of number of opened windows in WPF如何获取WPF中打开窗口的数量
【发布时间】:2015-06-29 08:57:21
【问题描述】:

我有一个要求,如果打开了一个window,则用户不能允许打开其他window,因为我尝试了以下代码。

if(System.Windows.Application.Current.Windows.Count == 0)
 {    
 //My code
 }

我正在检查当前打开的window 计数,如果大于 1 则用户无法打开其他窗口,我将在 if 语句中提及,

但是当我运行这段代码时,它给了我错误

“对象引用未设置为对象的实例。”

任何解决方案

【问题讨论】:

  • 您是否正在尝试检查某个特定窗口是否已打开,或者是否从您的应用程序中打开了任何窗口?

标签: c# asp.net wpf windows


【解决方案1】:

您可能会收到此错误,因为即使对于要加载的第一个窗口,您也会应用此检查。为此,您可以在代码中应用空检查。 对于加载的窗口列表,您可以使用应用程序获取它,

var loadedWindows = Application.Current.Windows.Cast<Window>()
                                               .Where(win => win.IsLoaded);

【讨论】:

  • 感谢 rohit 的帮助,但是当我使用您的解决方案时,我也会收到相同的错误“对象引用未设置为对象的实例。” var loadedWindows = System.Windows.Application.Current.Windows.Cast().Where(win => win.IsLoaded);
  • @SagarPatel,您可能会因为其他一些 null 变量而获得 Nullreference。您能否在您编写此代码的地方再写一些代码。
  • var loadedWindows = System.Windows.Application.Current.Windows.Cast&lt;Window&gt;().Where(win =&gt; win.IsLoaded); 在调试过程中,当编译器到达上述行时,它会报错。我还检查了if(System.Windows.Application.Current.Windows != null)。 System.Windows.Application.Current.Windows 有什么错误吗?
  • @SagarPatel,好的。你能否写下你可以在异常中看到的堆栈跟踪更多细节。
  • at MS.CMG.EBT.UI.EXCELWORKBOOK.EBTRibbon.btnManageTaxonomy_Click(Object sender, RibbonControlEventArgs e) in d:\EBTTool\Main\UI\MS.CMG.EBT.UI.EXCELWORKBOOK\EBTRibbon.cs:line 1012
【解决方案2】:

如果你想知道你的应用实例打开了多少个窗口,你可以这样做

 l_WindowCount = 0;

 foreach(var Window in App.Current.Windows)
 {
    l_WindowCount += 1
 }

if(l_WindowCount > 1)
{
//do what you want to do here
}

【讨论】:

  • 同:Application.Current.Windows.Count
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-31
  • 2016-06-11
  • 1970-01-01
  • 1970-01-01
  • 2023-01-12
  • 1970-01-01
相关资源
最近更新 更多