异步读取文件仍然会阻塞 UI

Reading file async still blocks the UI

我有一个简单的树视图,当点击树视图项目时我只加载一个文本文件

代码如下:

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;
    }
}

这有效,但是当我单击树视图项目时,ui 被冻结,直到文件读取完成。为什么会有这样的行为?我的代码中还有其他异步方法,它们不会阻塞 ui.

编辑: 问题似乎不在读取文件中,而是在通过数据绑定将大量文本设置为 textbox.text 属性时,尽管直接设置它也需要一个很多时间,让 ui 冻结

the ui is frozen, until file read is complete

使用 File.OpenText 打开的流从不异步。如我describe on my blog,您必须使用带有isAsync参数(设置为true)或fileOptions参数(包括FileOptions.Asynchronous值的方法打开文件).

it seems the issue not in reading file, but in setting large amount of text to textbox.text properti via databinding

是的,UI 元素不适用于大量数据。如果要显示大量数据,则需要使用 virtualization