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