首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
SAAS
ToB门户
了解全球最新的ToB事件
论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
微博
Follow
记录
Doing
博客
Blog
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
排行榜
Ranklist
相册
Album
应用中心
qidao123.com ToB IT社区-企服评测·应用市场
»
论坛
›
数据库
›
Oracle
›
WPF 加载页面的三种方式(瞬时加载,延长加载,异步活动 ...
返回列表
发新帖
WPF 加载页面的三种方式(瞬时加载,延长加载,异步活动)
[复制链接]
发表于 2025-12-19 16:03:29
|
显示全部楼层
|
阅读模式
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要
登录
才可以下载或查看,没有账号?
立即注册
×
在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 界面或进度条
保举选择
瞬时加载
:得当简朴场景,如视图内容较少,且加载速率快。
延长加载
:得当模块化操持或须要动态加载的应用。
异步活动
:得当复杂场景,加载较耗时时可与 Loading 界面联合提拔用户体验。
根据需求选择符合的方法,并可以联合利用(比方延长加载与异步活动组合)。
回复
使用道具
举报
返回列表
浏览过的版块
Java
公有云
DevOps与敏捷开发
.Net
主机安全
分布式数据库
程序人生
运维.售后
数据仓库与分析
虚拟化与私有云
我可以不吃啊
+ 我要发帖
登录后关闭弹窗
登录参与点评抽奖 加入IT实名职场社区
去登录
微信订阅号
微信服务号
微信客服(加群)
H5
小程序
快速回复
返回顶部
返回列表