我正在尝试将大型项目更新为最新的稳定Catel版本,并且需要找到ShowDialog替代方案,在我们的用例中转换为ShowDialogAsync根本不可能。
该项目停止将Catel更新与Catel V4.2集成,并且有一个大型代码库,对使用bool的方法进行~960同步(主线程)调用? IUIVisualizerService.ShowDialog(IViewModel)大部分处理返回的bool?来自ShowDialog并执行条件处理。 因此,我需要找到一个等待窗口关闭而不阻塞UIThread的替代方案,并且目前不可能将所有调用方法更改为异步,使用TaskCommands或由于缺乏人力和公司内部管理而将结果处理移至EventHandlers 。 这是旧的V4.2代码:
var uiVisualizerService = this.GetDependencyResolver().Resolve<IUIVisualizerService>();
return uiVisualizerService.ShowDialog(viewModelToShow);
理想的情况是仍然有一个像ShowDialog一样工作的Catel服务,或者找到一种同步显示DataWindows的不同方式。 编辑: 如果不明显我不能简单地使用await,因为500+类中的方法需要重写而不是手动测试(公司策略)或使用Task.Wait,Task.Result ......等因为WPF限制(如果我在主线程UI上使用阻塞调用冻结由于WPF的复杂性导致它等待在主线程上运行runS的机会,以便实际显示新窗口(实际上所有UI组件)导致不可避免的死锁),所以绝对不能用任何传统方式解决。
自4.2以来,Catel有更多的变化,而不仅仅是异步的东西,如果我是你,那会让我担心。不确定为什么你没有把它保持最新,但你有两个选择:
4.2于2015年9月1日发布,并于2019年1月28日发布5.9。这是近4年的开发和需要计划的重大变更发布。