我正在WPF
应用程序中工作,我在一个线程中进行了一个保存过程。在保存过程之后我启动了加载过程,我需要延迟,所以我使用Task.Delay
方法。
在保存/加载过程中,应用程序中会显示一个进度条,直到它完成。现在,当我使用Task.Delay
方法2秒时,应用程序中没有显示进度条。
现在问题是延迟(2秒)。当出现延迟时,用户开始使用该应用程序,然后突然启动加载过程。
所以我需要让Task.Delay
方法在Thread
内,这样我才能显示延迟的进度条。
我尝试了以下代码,但它向我发出警告,
// ViewModel代码:
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.
如果有替代方法,请告诉我。
答案 0 :(得分:1)
BackgroundWorker
已过时。将异步方法与Task.Run
结合使用,问题就会消失。
答案 1 :(得分:0)
您的第一个async
不是必需的,因为您没有使用await
。那是警告告诉你的。
这相当于您最初发布的内容,涉及的工作量少得多。请注意,现在需要async
。
async Task PutTaskDelayAsync() // convention is to name async methods with Async suffix
{
IsBusy = true;
await Task.Delay(2000);
IsBusy = false;
}