winforms async等待任务UI锁定

时间:2017-12-01 15:29:52

标签: c# winforms asynchronous

我正在尝试读取超过100k +文件的目录的内容。最终将解析每个文件。由于这是一项耗时很长的任务,我想向最终用户提供程序没有"冻结"的反馈,这是一个MVP模式项目设置。

我正在使用异步任务和IProgress向UI提供反馈,但是下面的任何一种方法都会锁定用户界面,我无法弄清楚为什么......

httpie

这会更新用户界面

    private async void MainFormViewOnStartProcessingFiles(object sender, EventArgs eventArgs)
    {
        // The Progress<T> constructor captures our UI context,
        //  so the lambda will be run on the UI thread.
        var asyncProgress = new Progress<int>(percent =>
        {
            EventAggregator.Instance.Publish(new DisplayMainFormWaitBarMessage($"Async found {percent} files..."));
        });

        // GetDirectoryFiles is run in the thread pool
        await Task.Run(() => GetDirectoryFilesAsync(asyncProgress));


        var syncProgress = new Progress<int>(percent =>
        {
            EventAggregator.Instance.Publish(new DisplayMainFormWaitBarMessage($"Sync found {percent} files..."));
        });

        GetDirectoryFiles(syncProgress);

    }

这是我的异步和非异步代码,用于将文件读入队列

        private void DisplayWaitingBarMessage(DisplayMainFormWaitBarMessage obj)
    {
        _mainFormView.DisplayWaitBarMessage(obj.DisplayText);
    }

0 个答案:

没有答案