Я пытаюсь обновить большой проект до последней стабильной версии 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 в основном потоке в для того, чтобы сделать фактическое отображение нового окна (фактически, всех компонентов пользовательского интерфейса), что вызывает неизбежную тупиковую ситуацию), поэтому его определенно нельзя решить ни одним из обычных способов.