编程语言
首页 > 编程语言> > C#学习细节(四)Task 和Async 和 Await\WPF 加载大数据界面卡死— UI 虚拟化

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