卡特尔(Catel)是否可以通过任何方式同步显示基于ViewModel的窗口?

时间:2019-04-02 14:40:44

标签: c# wpf catel

我正在尝试将大型项目更新为最新的稳定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组件),这将导致不可避免的死锁),因此绝对不能以任何传统方式解决该问题。

1 个答案:

答案 0 :(得分:0)

自4.2以来,卡特尔(Catel)中发生的变化不仅仅是异步的东西,如果我是你的话,这些东西会让我担心。不知道为什么您没有保持最新状态,但是有两种选择:

  1. 贴上4.2(仅在产品处于维护模式时才建议使用)
  2. 静静地进行更新,您会喜欢上新功能和性能升级

4.2已于2015年9月1日发布,而5.9已于2019年1月28日发布。这是将近4年的开发和需要计划的突破性变更发布。