Есть ли у Catel способ отображения окон (на основе ViewModel) синхронно? - PullRequest
0 голосов
/ 02 апреля 2019

Я пытаюсь обновить большой проект до последней стабильной версии Catel, и мне нужно найти альтернативу ShowDialog, в нашем случае просто невозможно конвертировать в ShowDialogAsync.

Проект прекратил интеграцию обновлений Catel с Catel V4.2, и существует большая кодовая база с ~ 960 синхронными (Main Thread) вызовами метода, использующего bool? IUIVisualizerService.ShowDialog (IViewModel), большинство из которых обрабатывают возвращаемый bool? из ShowDialog и выполнить условную обработку.
Поэтому мне нужно найти альтернативу, которая ожидает закрытия окна, не блокируя UIThread, и в настоящее время невозможно изменить все вызывающие методы на асинхронные, использовать TaskCommands или переместить обработку результатов в EventHandlers из-за нехватки рабочей силы и внутреннего управления компанией.

Это старый код V4.2:

var uiVisualizerService = this.GetDependencyResolver().Resolve<IUIVisualizerService>();
return uiVisualizerService.ShowDialog(viewModelToShow);

Идеальным сценарием является то, что по-прежнему существует служба Catel, которая работает как ShowDialog или, в качестве альтернативы, находит другой способ синхронного отображения DataWindows.

Редактировать:
В случае, если это не очевидно, я не могу просто использовать await из-за методов в 500+ классах, которые необходимо переписать, а затем протестировать вручную (политика компании) или используйте Task.Wait, Task.Result ... и т. д. из-за ограничения WPF (если я использую блокирующий вызов в основном потоке, пользовательский интерфейс зависает из-за сложностей WPF, заставляющих его ждать возможности запустить Sync в основном потоке в для того, чтобы сделать фактическое отображение нового окна (фактически, всех компонентов пользовательского интерфейса), что вызывает неизбежную тупиковую ситуацию), поэтому его определенно нельзя решить ни одним из обычных способов.

1 Ответ

0 голосов
/ 02 апреля 2019

В 4.2 больше изменений в Catel, чем в асинхронных вещах, которые бы волновали меня на вашем месте. Не знаю, почему вы не обновили все это, но у вас есть 2 варианта:

  1. Придерживайтесь 4.2 (рекомендуется только если продукт находится в режиме обслуживания)
  2. Укусите пулю и обновите, вам понравятся новые функции и улучшения производительности

4.2 был выпущен 1 сентября 2015 года, а 5.9 - 28 января 2019 года. Это почти 4 года разработки и выпуск критического изменения, который вам нужно запланировать.

...