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