【问题标题】:Async navigation in Prism Scoped RegionPrism Scoped Region 中的异步导航
【发布时间】:2015-11-10 10:24:24
【问题描述】:

我有一个基于 PRISM 6.1.0 的 WPF 项目 Shell 将 TabControl 公开为“MainRegion”。 我需要显示几个从数据库加载数据的视图。数据加载过程需要时间,并且 UI 保持冻结状态。 我试过像这样运行这个procedd async

await Task.Run(() =>
            {
                RegionManager.RequestNavigate(RegionNames.MainRegion, "FirstView", parameters);
                RegionManager.RequestNavigate(RegionNames.MainRegion, "SecondView", parameters);
                ....
                RegionManager.RequestNavigate(RegionNames.MainRegion, "LastView", parameters);
            });

但是什么都没有发生,UI 保持冻结状态,直到最后一个视图被加载,然后才在 TabControl 中显示所有视图...

有没有办法异步加载视图?

【问题讨论】:

  • 除了Brian所说的,当一个进程需要很长时间并且UI线程需要在进程运行时保持响应时,将长时间运行的进程放在单独的线程上的最常见方法。在 WPF 中,主要使用的技术是 Backgroundworker。 Backgroundworker 主要用于多线程应用程序。数据加载时需要集成 Busyindicator,Busyindicer 自带 WPF 扩展工具包。

标签: c# wpf asynchronous prism


【解决方案1】:

首先导航到您的视图,然后让您的视图异步加载其数据。您可以显示一个繁忙的指示器控件来显示正在后台加载的内容。当数据加载完毕后,busy 指示器会隐藏,View 会显示新加载的数据。

【讨论】:

  • 所以不可能让所有视图异步?仅导航查看,异步加载数据,然后转到第二个等...?
  • 你想通过连续导航到 3 个视图来完成什么?
  • 我的项目由 TabControl 组成,其中每个选项卡都是一个 ScopedRegion,代表一组不同的选项卡,这些选项卡因数据类型而异。每个 ScopedRegion 可能包含不同的视图集。在我的代码中,我检查了 ScopedRegion 中应该有哪些视图并逐个导航到它们。
  • 在这种情况下,导航到您的视图,并让您的数据异步加载。数据准备好后,视图将显示它。您不能在不同的线程上创建视图并将其显示在 UI 线程上。控件具有线程亲和性,这是不可能的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-11-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-08
相关资源
最近更新 更多