Skip to main content
 首页 » 编程设计

c#之如果 Apllication.Current 为 NULL,如何获取所有事件 wpf 窗口(多线程)的集合

2024年02月25日35arxive

在我的项目中,我以编程方式从不同线程中的类创建了几个 wpf 窗口。在这个 wpf 窗口代码 (xaml.cs) 之一中,我想使用 System.Windows.Application.Current.Windows 获取所有事件的 wpf 窗口。但是System.Windows.Application.Current是Null .我怎样才能得到这个集合,真的有可能吗?

请您参考如下方法:

如果出于某种原因在不同的线程上创建窗口,您应该自己跟踪它们。例如,您可以将它们添加到可以从所有线程访问的静态集合中,例如:

public class ApplicationService 
{ 
    private readonly List<Window> _windows = new List<Window>(); 
 
    public IEnumerable<Window> Windows => _windows; 
 
    public void Add(Window window) 
    { 
        if (window == null) 
            throw new ArgumentNullException(nameof(window)); 
 
        lock (_windows) 
        { 
            window.Closed += Window_Closed; 
            _windows.Add(window); 
        } 
    } 
 
    private void Window_Closed(object sender, EventArgs e) 
    { 
        Window window = (Window)sender; 
        lock (_windows) 
        { 
            window.Closed -= Window_Closed; 
            _windows.Remove(window); 
        } 
    } 
} 

Application.Current.Windows 集合不会跟踪在应用程序的调度程序线程之外的任何其他线程上创建的窗口。