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

2021/12/3 14:07:26

本文主要是介绍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>

 





这篇关于C#学习细节(四)Task 和Async 和 Await\WPF 加载大数据界面卡死— UI 虚拟化的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程