一、需求描述
C/S架构模式中,有时由于网络较差或服务器的原因,导致在点击了登录按钮后界面卡死不动,为了解决在点击了登录按钮后界面能够拖动,下面使用了C#5.0的async/await关键字来实现这样的功能
二、代码实现
private void btnLogin_Click(object sender, EventArgs e)
{
new Action(async () =>
{
Task<bool> task = new Func<Task<bool>>(async () =>
{
return await Task.Run(() =>
{
//这里面返回的是数据库校验的bool结果
});
})();
if (await task)
{
//这里写登录成功后的操作
}
else
{
//这里写登录失败后的操作
}
})();
}
private void btnLogin_Click(object sender, EventArgs e)
{
Func<bool> funcLogin = () => { /*这里写登录的操作*/ };
Action actionSucces = () => { /*这里写登录成功后的操作*/ };
Action actionFail = () => { /*这里写登录失败后的操作*/ };
new Action(async () =>
{
Task<bool> task = new Func<Task<bool>>(async () =>
{
return await Task.Run(() =>
{
return funcLogin();
});
})();
if (await task)
{
actionSucces();
}
else
{
actionFail();
}
})();
}
public void AsyncLogin(Func<bool> func, Action actionSuccess, Action actionFail)
{
new Action(async () =>
{
Task<bool> task = new Func<Task<bool>>(async () =>
{
return await Task.Run(() =>
{
return func();
});
})();
if (await task)
{
actionSuccess();
}
else
{
actionFail();
}
})();
}