ОК, следующая проблема:Позиционирование и максимизация окна, которое выполняется в фоновой задаче
У меня есть окна на 10 экранах, которые находятся на одном ПК. Некоторые из них должны работать в фоновых задачах. Его WPF-приложение, но для размещения на экране и т. Д., Я использую некоторые части WinForms. Для этого я использую следующие строки:
foreach (List<string> myStrings in Screen.AllScreens.Select(myScreen => _xml.GetScreenConfigs(i)))
{
Thread newWindowThread = new Thread(() =>
{
Marketing myMarketing = new Marketing(i, myStrings[0]);
myMarketing.Show();
Dispatcher.Run();
});
newWindowThread.SetApartmentState(ApartmentState.STA);
newWindowThread.IsBackground = true;
newWindowThread.Start();
}
и внутри этого окна я использую следующие для его размещения:
[DllImport("user32.dll")]
private static extern IntPtr GetActiveWindow();
...
Left = Convert.ToInt32(screenArray[screenNumber].Bounds.Left);
Top = Convert.ToInt32(screenArray[screenNumber].Bounds.Top);
var active = GetActiveWindow();
var singleOrDefault = Application.Current.Windows.OfType<Window>()
.SingleOrDefault(window => new WindowInteropHelper(window).Handle == active);
if (singleOrDefault == null) return;
singleOrDefault.Title = "Monitor" + screenNumber;
singleOrDefault.Name = "Monitor" + screenNumber;
singleOrDefault.WindowState = WindowState.Maximized;
Но когда я добираюсь до «вар SingleOrDefault» -линии, я получаю что он не может изменить объект Application.Current.Windows, потому что он принадлежит другому потоку. Итак, мой вопрос:
«Что я могу сделать, чтобы использовать это окно в другом потоке И разместить и максимизировать его?»
Вы уверены, что вам нужно несколько потоков пользовательского интерфейса? Почему просто не использовать один поток пользовательского интерфейса для отображения результатов фоновых операций? – Dennis
Да, потому что есть элемент управления WebBrowser, который выполняется несколько раз, и когда я использую его со вспышкой (и мне нужно использовать флеш-память, нет никакого способа обойти ее), после того, как 3 элемента управления будут опускаться на колени, когда все они работают на той же теме. –
Как я протестировал, коллекция (Application.Current.Windows) регистрирует только окна в основном потоке, вы не можете получить из него свои не связанные с ним потоки. Вы пытаетесь найти активный из большого количества окон и максимизировать его? – Eben