c# - 线程 C# 中的 Task.Delay

标签 c# wpf multithreading task

我在 WPF 应用程序中工作,我在其中的一个线程内进行保存过程。在保存过程之后,我将启动加载过程,我需要延迟,所以我使用了 Task.Delay 方法。

在保存/加载过程中,应用程序中会显示一个进度条,直到完成。现在,当我使用 Task.Delay 方法 2 秒时,应用程序中没有显示进度条。

现在的问题是延迟(2 秒)。当出现延迟时,用户开始使用应用程序并突然开始加载过程。

所以我需要将 Task.Delay 方法放在 Thread 中,这样我也可以显示该延迟的进度条。

我尝试了以下代码,但它向我发出警告,

// View 模型代码:

 BackgroundWorker bw;
 async System.Threading.Tasks.Task PutTaskDelay()  //warning here
        {
            bw = new BackgroundWorker();
            IsBusy = true;        // to show the progress bar
            bw.RunWorkerAsync();

            bw.DoWork += async (s, e) =>
            {
                await System.Threading.Tasks.Task.Delay(2000);
            };

            bw.RunWorkerCompleted += (s, e) =>
            {
                IsBusy = false;   // Hide the progress bar
            };
        }

警告:

The async method lacks await operators and will run synchronously. Consider using the async operator to await non-blocking API calls, or await Task.Run(...) to do CPU-bound work on a backgrond thread.

如果有替代方法,请告诉我。

最佳答案

BackgroundWorker 已过时。将异步方法与 Task.Run 结合使用,问题就会消失。

关于c# - 线程 C# 中的 Task.Delay,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35867134/

相关文章:

c# - Serializable 和 MarshalByRefObject 之间的区别

android - 如何将 ExecutorService 与 Android AsyncTask 一起使用?

c# - 在多个 View 之间共享 ViewModel

.net - WPF 生产准备好了吗?

c - 如何检查套接字是否在c中使用,以在单个套接字上同时执行多个写入

c++ - 在多个自动重置事件上使用 WaitForMultipleObjects

c# - 如何使用 C# 从 myspace 获取 friend 的事件流和公共(public)事件?

c# - 身份 2.0 _LoginPartial 名字

c# - 为什么这个额外的连接会增加查询的数量?

c# - 如何根据另一个控件调整控件的大小? (WPF)