WPF 加载页面的三种方式(瞬时加载,延长加载,异步活动)

[复制链接]
发表于 2025-12-19 16:03:29 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
在WPF中,瞬时加载、延长加载和异步活动分别实用于差别的场景,它们各自的实现方式和用途如下:
1. 瞬时加载

界说:

在赋值或初始化时,视图和数据会立即加载,全部的逻辑在主线程上完成。视图在 UI 上的渲染险些是同步的。
特点:


  • 快速初始化,全部逻辑一次性完成。
  • 不得当复杂或耗时利用(如大数据加载)。
示例代码:
  1. public UserControl AppsContent { get; set; }
  2. public MainWindow()
  3. {
  4.     InitializeComponent();
  5.     // 瞬时加载视图
  6.     AppsContent = new AView
  7.     {
  8.         DataContext = new AViewModel()
  9.     };
  10.     ContentControlMain.Content = AppsContent;
  11. }
复制代码
2. 延长加载

界说:

在须要利用时才加载资源或视图,通常通过懒加载(Lazy Loading)模式实现。
特点:


  • 初始时不创建对象,只有在实际访问时才实例化。
  • 节省内存,进步启动性能。
  • 得当须要动态加载的场景,如模块化界面。
示例代码:

利用 Lazy<T> 延长加载:
 

  1. private Lazy<AView> _lazyView = new Lazy<AView>(() => new AView
  2. {
  3.     DataContext = new AViewModel()
  4. });
  5. public UserControl AppsContent => _lazyView.Value; // 只有访问时才初始化
复制代码
手动延长加载:
  1. private AView _aView;
  2. public UserControl AppsContent
  3. {
  4.     get
  5.     {
  6.         if (_aView == null)
  7.         {
  8.             _aView = new AView
  9.             {
  10.                 DataContext = new AViewModel()
  11.             };
  12.         }
  13.         return _aView;
  14.     }
  15. }
复制代码
利用 DataTemplate 延长加载:
  1. <ContentControl Content="{Binding CurrentView}">
  2.     <ContentControl.Resources>
  3.         <DataTemplate DataType="{x:Type local:AViewModel}">
  4.             <local:AView />
  5.         </DataTemplate>
  6.     </ContentControl.Resources>
  7. </ContentControl>
复制代码
3. 异步活动

界说:

通过异步方法加载视图或数据,制止壅闭主线程,进步应用相应速率。
特点:


  • 数据和视图加载可并行。
  • 用户体验更流通,但须要处置惩罚异步状态和错误。
  • 常用 async/await。
示例代码:

异步加载视图:
 

  1. public async Task<UserControl> LoadViewAsync()
  2. {
  3.     return await Task.Run(() =>
  4.     {
  5.         // 模拟耗时操作
  6.         System.Threading.Thread.Sleep(3000);
  7.         return new AView
  8.         {
  9.             DataContext = new AViewModel()
  10.         };
  11.     });
  12. }
  13. private async void InitializeView()
  14. {
  15.     LoadingOverlay.Visibility = Visibility.Visible; // 显示 Loading 界面
  16.     AppsContent = await LoadViewAsync();
  17.     ContentControlMain.Content = AppsContent;
  18.     LoadingOverlay.Visibility = Visibility.Collapsed; // 隐藏 Loading 界面
  19. }
复制代码
异步加载数据:

如果视图是立即加载的,可以延长加载其数据:
  1. public async void LoadDataAsync()
  2. {
  3.     IsLoading = true;
  4.     var data = await Task.Run(() =>
  5.     {
  6.         // 模拟耗时数据加载
  7.         return SomeService.LoadData();
  8.     });
  9.     MyViewModel.Data = data;
  10.     IsLoading = false;
  11. }
复制代码
三者对比

特性瞬时加载延长加载异步活动实行机会初始化时立即加载利用时加载异步实行加载任务性能影响初始时间较长初始时间较短,节省内存非壅闭,加载过程更流通实用场景小型应用,初始化逻辑简朴模块化、条件性加载大型数据或复杂逻辑的加载用户体验无额外提示,大概卡顿延长加载内容表现 Loading 界面或进度条
保举选择


  • 瞬时加载:得当简朴场景,如视图内容较少,且加载速率快。
  • 延长加载:得当模块化操持或须要动态加载的应用。
  • 异步活动:得当复杂场景,加载较耗时时可与 Loading 界面联合提拔用户体验。
根据需求选择符合的方法,并可以联合利用(比方延长加载与异步活动组合)。
 

回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表