我有一个简单的树视图,当点击treeview项目我只是加载一个文本文件
以下是代码:
private async void NotesTreeView_OnSelectedItemChanged(object sender, RoutedPropertyChangedEventArgs<object> e)
{
var clickedModel = e.NewValue as TreeFileItem;
if (clickedModel != null && File.Exists(clickedModel.FilePath))
{
_viewModel.NoteLoadingInProgress = true;
using (var reader = File.OpenText(clickedModel.FilePath))
{
var fileContent = await reader.ReadToEndAsync();
_viewModel.ActiveNote = fileContent;
}
_viewModel.NoteLoadingInProgress = false;
}
}
这样可行,但是当我点击treeview项时,ui被冻结,直到文件读取完成。为何如此行为?我的代码中有其他异步方法,它们不会阻止ui。
编辑:似乎问题不在于读取文件,而是通过数据绑定将大量文本设置到textbox.text属性,虽然直接设置也需要花费大量时间并使ui冻结
答案 0 :(得分:2)
ui被冻结,直到文件读取完成
使用File.OpenText
打开的流永远不会异步。在我describe on my blog时,您必须使用isAsync
参数(设置为true
)或fileOptions
参数(包括FileOptions.Asynchronous
值)的方法打开文件)。
似乎问题不在于读取文件,而在于通过数据绑定将大量文本设置到textbox.text properti
是的,UI元素不适用于大量数据。如果要显示大量数据,则需要使用virtualization。