首页 > 解决方案 > 尝试更新时 UI 被阻止

问题描述

我想开始学习异步,我已经启动了一个小应用程序来做到这一点。我从文件中读取并更新我的 UI,但是当我尝试更新时 UI 被阻塞。我有以下命令和方法:

LoadTextFileCommand = new RelayCommand(async () => await LoadTextFileExecute());
        
    private async Task LoadTextFileExecute()
    {
        var openFileDialog = new OpenFileDialog();
        if (openFileDialog.ShowDialog() != true)
            return;

        var result = await ReadFileAsync(openFileDialog.FileName);

        Text = Encoding.Default.GetString(result);

        Debug.WriteLine(Encoding.Default.GetString(result));
    }

    public async Task<byte[]> ReadFileAsync(string path)
    {
        using (var fileStream = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.Read))
        {
            var result = new byte[fileStream.Length];
            
            await fileStream.ReadAsync(result, 0, (int)fileStream.Length);

            return result;
        }
    }

    <TextBox
        Grid.Row="1"
        Margin="10,10,10,10"
        TextWrapping="Wrap"
        VerticalScrollBarVisibility="Auto"
        Text="{Binding Path=Text, Mode=TwoWay}" />

Debug.WriteLine 它的写入速度比 UI 更新速度快。当我尝试更新 Text(绑定到文本框)时,UI 会被阻止几秒钟。我不确定我需要更改什么,以便在阅读文本和更新 UI 时在我的应用程序上执行其他任务。

标签: c#wpfasync-await

解决方案


推荐阅读