WPF UI на нескольких потоках?
У меня есть большое приложение WPF MVVM (более 100 окон в настоящее время и растет.) Хотя я пытаюсь сделать все возможное в фоновых потоках, всегда приходит время, когда результаты должны быть отправлены обратно в поток пользовательского интерфейса для отображения. Если у вас много окон, которые делают это одновременно, это может повлиять на производительность.
В прошлом я пытался запустить каждое окно в отдельном потоке пользовательского интерфейса, но столкнулся с таким большим количеством проблем с потоками, что мне пришлось вернуться к стандартной модели WPF, состоящей только из 1 потока пользовательского интерфейса на приложение.
Я знаю, что с приходом Windows 10 многие пользователи откроют еще больше окон на отдельных рабочих столах, что ухудшит ситуацию.
Кто-нибудь знает, как заставить несколько потоков пользовательского интерфейса работать правильно в WPF? Или есть какая-нибудь информация, которую я могу исследовать, чтобы помочь моему приложению продвинуться дальше?
Я подходил, я пытался в прошлом сделать что-то похожее на это:
private void OnCreateNewWindow(
object sender,
RoutedEventArgs e)
{
Thread thread = new Thread(() =>
{
Window1 w = new Window1();
w.Show();
w.Closed += (sender2, e2) =>
w.Dispatcher.InvokeShutdown();
System.Windows.Threading.Dispatcher.Run();
});
thread.SetApartmentState(ApartmentState.STA);
thread.Start();
}
Это было около 2 лет назад, и я больше не могу вспомнить все проблемы, с которыми я столкнулся, используя это, к сожалению.
Есть ли другой способ? Кто-нибудь получил приложение с множеством окон для правильной работы, используя этот подход или другой?