Как получить коллекцию всех активных окон wpf (многопоточность), если Apllication.Current равен NULL? - PullRequest
1 голос
/ 13 мая 2019

В моем проекте я программно создаю пару окон wpf из класса в разных потоках. В одном из этого кода Windows wpf (xaml.cs) я хочу получить все активные окна wpf, используя System.Windows.Application.Current.Windows, но System.Windows.Application.Current это Null. Как я могу получить эту коллекцию и действительно ли это возможно?

1 Ответ

3 голосов
/ 13 мая 2019

Если по тем или иным причинам вы создаете окна в разных потоках, вы должны следить за ними самостоятельно.Например, вы можете добавить их в статическую коллекцию, которая может быть доступна из всех потоков, например:

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 не отслеживает окна, созданные в каком-либо другом потоке, кроме диспетчера приложения.нить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...