我使用C#/ VS2012/.Net4.0/Microsoft.Bcl.async NuGet包
在之前的问题之后,我尝试使用async/await来避免冻结UI.但是我的每个测试都没有成功.
执行繁重工作的主要功能是这样的:
public bool PopulateTV()
{
using (WaitingForm waitingForm=new WaitingForm())
{
waitingForm.Show();
bool boolResult=DoHeavyWork(); //UI is freezing, waitingForm() doesn't show correctly
return boolResult;
}
}
Run Code Online (Sandbox Code Playgroud)
对此功能的调用就像
if(!PopulateTV())
{
}
Run Code Online (Sandbox Code Playgroud)
我尝试实现async/await
public async Task<bool> populateTV()
{
using (WaitingForm waitingForm=new WaitingForm())
{
Task<bool> func=DoHeavyWork();
bool boolResult=await func;
return boolResult;
}
}
public Task<bool> DoHeavyWork()
{
//do the work
return boolResult;
}
Run Code Online (Sandbox Code Playgroud)
当然,我得到一个错误DoHeavyWork,因为我返回a bool而不是Task<bool>.所以我改变了DoHeavyWork功能:
public async Task<bool> DoHeavyWork()
{
//do the work
return …Run Code Online (Sandbox Code Playgroud)