listview - UWP Listview 冻结应用几秒钟
问题描述
当我导航到包含列表视图的框架时,我的应用程序在获取数据时冻结了几秒钟。我尝试在我的主菜单中显示一个加载文本块,但它只在我的应用程序导航到包含列表视图的框架之前开始显示。
有什么方法可以加快加载速度,或者在应用程序冻结之前显示加载消息?
主菜单按钮
private void moviesClicked(object sender, RoutedEventArgs e)
{
txtLoading.Visibility = Visibility.Visible;
Frame.Navigate(typeof(MovieList));
}
**列表视图页面的构造函数**
public sealed partial class MovieList : Page
{
private MoviesViewModel vm;
public MovieList()
{
InitializeComponent();
SystemNavigationManager.GetForCurrentView().AppViewBackButtonVisibility = AppViewBackButtonVisibility.Visible;
SystemNavigationManager.GetForCurrentView().BackRequested += (s, e) =>
{
// Handle the Back pressed
};
// vm contains the list loaded into the view
vm = new MoviesViewModel();
}
}
视图模型
public class MoviesViewModel
{
public ObservableCollection<MovieGeneral> movies { get; set; } = new ObservableCollection<MovieGeneral>();
private MovieService movieService = new MovieService();
public MoviesViewModel()
{
movies = movieService.LoadMovies();
}
}
解决方案
如果使用网络请求,比如HttpClient
,可以通过该HttpClient.GetAsync()
方法进行异步调用,即不会冻结当前UI线程。
但是不能await
在构造函数中使用来进行异步调用,所以建议不要将LoadMovie
方法放在MoviesViewModel
的构造函数中,而是创建一个新方法,然后在MoviesViewModel
初始化完成后再进行异步调用,像这样:
视图模型
public class MoviesViewModel
{
...
public async Task LoadMovies()
{
movies = await movieService.LoadMovies();
}
}
页
public sealed partial class MovieList : Page
{
private MoviesViewModel vm;
public MovieList()
{
InitializeComponent();
// other code
}
protected async override void OnNavigatedTo(NavigationEventArgs e)
{
vm = new MoviesViewModel();
await vm.LoadMovies();
}
}
有关异步编程的更多信息,您可以查看此文档
最好的祝福。
推荐阅读
- sql - SQL 运行总秒数 - 时间戳/值
- spring-integration - 使用 Spring Boot 2 启用 MessageHistory 时无法发送 kafka 消息
- sinon - 我可以使用带有 sinon.assert.callWith 的自定义匹配器吗?
- ckeditor - 第一次提交时未提交 CKEDITOR 字段中的文本
- html - 模板标签内容为空
- r - 为什么 data.table 连接不适用于日期?
- excel - vba Application.OnKey F3 在单元格上写入和光标闪烁期间按键盘不起作用
- php - 在创建职业解决方案时,我在数据库 laravel 中获得了 0 值
- python - 如何使用 python.pathlib.Path 在根目录中创建目录?
- highcharts - 除非数据点超过最小/最大网格线,否则如何停止 Highcharts 在图表的末端创建新的网格线?