C#学习细节(四)Task 和Async 和 Await\WPF 加载大数据界面卡死— UI 虚拟化
作者:互联网
1、Task 和Async 和 Await
.net4.0 与.net4.5 及以上有了差异
.net4.0版本:
只能使用Task异步:
1、var loadingTask = new System.Threading.Tasks.Task(delegate
{
//执行代码
});
loadingTask.Start();
2、System.Threading.Tasks.Task.Factory.StartNew(delegate
{
//执行代码
});
.net 4.5 有了Async 和 Await 关键字
可使用这种方式做异步编程
2、WPF 加载大数据界面卡死— UI 虚拟化
当界面需要绑定大数据的数据源时,会出现界面卡顿卡死的体验,
这时就可以用UI 虚拟化技术,WPF自带的
使用ItemsControl 控件时默认没有虚拟化,需要自定Template 和ItemsPanel
.net4.0 版本:
1、Template
(1)必须添加ScrollViewer(必要的)
(2)必须将 CanContentScroll="True" 置为True,也可以在ItemsControl通过依赖属性设置ScrollViewer.CanContentScroll="True"。(必要的)
(3)可以在ItemsControl通过依赖属性设置VirtualizingStackPanel.IsVirtualizing="True" VirtualizingStackPanel.VirtualizationMode="Recycling"(非必要)
<ItemsControl.Template> <ControlTemplate> <Border CornerRadius="10" BorderThickness="1" BorderBrush="LightGray"> <ScrollViewer VerticalScrollBarVisibility="Auto" CanContentScroll="True"> <ItemsPresenter/> </ScrollViewer> </Border> </ControlTemplate> </ItemsControl.Template>
2、ItemsPanel
(1)必须使用虚拟化面板。
官网介绍:
标准虚拟化面板包括WrapGrid和VirtualizingStackPanel。
如果将ItemsControl中的默认面板替换为非虚拟化面板(如VariableSizedWrapGrid或StackPanel),则会为该控件禁用 UI 虚拟化。
官网:Using virtualization with a list or grid (XAML) (Windows) | Microsoft Docs
<ItemsControl.ItemsPanel> <ItemsPanelTemplate> <VirtualizingStackPanel Orientation="Vertical"/> </ItemsPanelTemplate> </ItemsControl.ItemsPanel>
标签:Task,虚拟化,C#,Await,ItemsControl,UI,面板,True 来源: https://www.cnblogs.com/rjdgd/p/15637485.html