卡特尔有没有办法同步显示窗口(基于视图模型)?



我正在尝试将一个大型项目更新到最新的稳定 Catel 版本,需要找到一个 ShowDialog 替代方案,在我们的用例中,转换为 ShowDialogAsync 是不可能的。

该项目停止将 Catel 更新与 Catel V4.2 集成,并且有一个大型代码库,其中包含对使用 bool 的方法进行 ~960 次同步(主线程)调用?IUIVisualizerService.ShowDialog(IViewModel) 其中大部分处理返回的布尔值?并执行条件处理。
所以我需要找到一种替代方法,等待窗口关闭而不阻塞 UIThread,并且由于缺乏人力和公司内部管理,目前将所有调用方法更改为异步、使用 TaskCommand 或将结果处理转移到事件处理程序是不可行的。

这是旧的 V4.2 代码:

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

理想的情况是,仍然有一个Catel服务,它像ShowDialog一样工作,或者找到一种不同的方法来同步显示DataWindows。

编辑:
如果不是很明显,我不能简单地使用 await,因为 500+ 类中的方法需要重写,而不是手动测试(公司政策)或使用 Task.Wait, Task.Result...等由于 WPF 的限制(如果我在主线程上使用阻塞调用 UI 由于 WPF 的复杂性导致它等待在主线程上运行同步的机会以实际显示新窗口(实际上是所有 UI 组件),这会导致不可避免的死锁),所以它绝对无法以任何常规方式解决。

自 4.2 以来,Catel 中有更多的变化,而不仅仅是如果我是你,我会担心的异步东西。不知道为什么您没有将其全部保持最新状态,但您有 2 个选择:

  1. 坚持使用 4.2(仅在产品处于维护模式时才建议使用)
  2. 咬紧牙关并更新,您会喜欢新功能和性能升级

4.2 于 2015 年 9 月 1日发布,5.9 于 2019 年 1 月 28 日发布。这是将近 4 年的开发和您需要规划的重大变更版本。

相关内容

最新更新