WPF 加载页面的三种方式(瞬时加载,延迟加载,异步行为)

embedded/2024/11/27 7:54:35/

在WPF中,瞬时加载延迟加载异步行为分别适用于不同的场景,它们各自的实现方式和用途如下:

1. 瞬时加载

定义:

在赋值或初始化时,视图和数据会立即加载,所有的逻辑在主线程上完成。视图在 UI 上的渲染几乎是同步的。

特点:
  • 快速初始化,所有逻辑一次性完成。
  • 不适合复杂或耗时操作(如大数据加载)。
示例代码:
public UserControl AppsContent { get; set; }public MainWindow()
{InitializeComponent();// 瞬时加载视图AppsContent = new AView{DataContext = new AViewModel()};ContentControlMain.Content = AppsContent;
}

2. 延迟加载

定义:

在需要使用时才加载资源或视图,通常通过懒加载(Lazy Loading)模式实现。

特点:
  • 初始时不创建对象,只有在实际访问时才实例化。
  • 节省内存,提高启动性能。
  • 适合需要动态加载的场景,如模块化界面。
示例代码:
使用 Lazy<T> 延迟加载:
 
private Lazy<AView> _lazyView = new Lazy<AView>(() => new AView
{DataContext = new AViewModel()
});public UserControl AppsContent => _lazyView.Value; // 只有访问时才初始化

手动延迟加载:

private AView _aView;
public UserControl AppsContent
{get{if (_aView == null){_aView = new AView{DataContext = new AViewModel()};}return _aView;}
}

使用 DataTemplate 延迟加载:

<ContentControl Content="{Binding CurrentView}"><ContentControl.Resources><DataTemplate DataType="{x:Type local:AViewModel}"><local:AView /></DataTemplate></ContentControl.Resources>
</ContentControl>

3. 异步行为

定义:

通过异步方法加载视图或数据,避免阻塞主线程,提高应用响应速度。

特点:
  • 数据和视图加载可并行。
  • 用户体验更流畅,但需要处理异步状态和错误。
  • 常用 async/await
示例代码:
异步加载视图:
 
public async Task<UserControl> LoadViewAsync()
{return await Task.Run(() =>{// 模拟耗时操作System.Threading.Thread.Sleep(3000);return new AView{DataContext = new AViewModel()};});
}private async void InitializeView()
{LoadingOverlay.Visibility = Visibility.Visible; // 显示 Loading 界面AppsContent = await LoadViewAsync();ContentControlMain.Content = AppsContent;LoadingOverlay.Visibility = Visibility.Collapsed; // 隐藏 Loading 界面
}
异步加载数据:

如果视图是立即加载的,可以延迟加载其数据:

public async void LoadDataAsync()
{IsLoading = true;var data = await Task.Run(() =>{// 模拟耗时数据加载return SomeService.LoadData();});MyViewModel.Data = data;IsLoading = false;
}

三者对比

特性瞬时加载延迟加载异步行为
执行时机初始化时立即加载使用时加载异步执行加载任务
性能影响初始时间较长初始时间较短,节省内存非阻塞,加载过程更流畅
适用场景小型应用,初始化逻辑简单模块化、条件性加载大型数据或复杂逻辑的加载
用户体验无额外提示,可能卡顿延迟加载内容显示 Loading 界面或进度条

 

推荐选择

  1. 瞬时加载:适合简单场景,如视图内容较少,且加载速度快。
  2. 延迟加载:适合模块化设计或需要动态加载的应用。
  3. 异步行为:适合复杂场景,加载较耗时时可与 Loading 界面结合提升用户体验。

根据需求选择合适的方法,并可以结合使用(例如延迟加载与异步行为组合)。
 


http://www.ppmy.cn/embedded/140844.html

相关文章

从ChatGPT到代理AI:安全领域的新变革

生成式人工智能&#xff08;genAI&#xff09;和大型语言模型&#xff08;LLMs&#xff09;的出现&#xff0c;如ChatGPT&#xff0c;引发了一场波及每个行业和企业的变革。这些技术不仅带来新的能力、效率和可能性&#xff0c;还动摇了现有的结构、流程、治理和运营活动。许多…

Unreal从入门到精通之如何绘制用于VR的3DUI交互的手柄射线

文章目录 前言实现方式MenuLaser实现步骤1.Laser和Cursor2.移植函数3.启动逻辑4.检测射线和UI的碰撞5.激活手柄射线6.更新手柄射线位置7.隐藏手柄射线8.添加手柄的Trigger监听完整节点如下:效果图前言 之前我写过一篇文章《Unreal5从入门到精通之如何在VR中使用3DUI》,其中讲…

余弦相似度

余弦相似度&#xff08;Cosine Similarity&#xff09; 是一种常用的度量两个向量之间相似度的方法&#xff0c;尤其适用于文本分析、信息检索、推荐系统等领域。它的核心思想是通过计算两个向量夹角的余弦值来衡量它们的相似度&#xff0c;而不是直接计算向量的欧几里得距离。…

SpringBoot(9)-Dubbo+Zookeeper

目录 一、了解分布式系统 二、RPC 三、Dubbo 四、SpringBootDubboZookeeper 4.1 框架搭建 4.2 实现RPC 一、了解分布式系统 分布式系统&#xff1a;由一组通过网络进行通信&#xff0c;为了完成共同的任务而协调工作的计算机节点组成的系统 二、RPC RPC&#xff1a;远程…

18:(标准库)DMA二:DMA+串口收发数据

DMA串口收发数据 1、DMA串口发送数据2、DMA中断串口接收定长数据包3、串口空闲中断DMA接收不定长数据包 1、DMA串口发送数据 当串口的波特率大于115200时&#xff0c;可以通过DMA1进行数据搬运&#xff0c;以防止数据的丢失。如上图所示&#xff1a;UART1的Tx发送请求使用DMA1的…

搜维尔科技:研究人员如何使用SenseGlove Nova触觉反馈手套远程操作机器人手

研究人员如何使用SenseGlove Nova触觉反馈手套远程操作机器人手 搜维尔科技&#xff1a;研究人员如何使用SenseGlove Nova触觉反馈手套远程操作机器人手

Web 表单开发全解析:从基础到高级掌握 HTML 表单设计

文章目录 前言一、什么是 Web 表单?二、表单元素详解总结前言 在现代 Web 开发中,表单 是用户与后端服务交互的重要桥梁。无论是用户登录、注册、搜索,还是提交反馈,表单都无处不在。在本文中,我们将从基础入手,全面解析表单的核心知识点,并通过示例带你轻松掌握表单开…

001 MATLAB介绍

前言&#xff1a; 软件获取渠道有很多&#xff0c;难点也就是百度网盘下载慢&#xff1b; 线上版本每月有时间限制。 01 MATLAB介绍 性质&#xff1a; MATLAB即Matrix Laboratory 矩阵实验室的意思&#xff0c;是功能强大的计算机高级语言, 已广泛应用于各学科研究部门、…