这是我创建的异步功能,这里在点击这个功能时遇到错误。
public async Task<bool> Login(string UserName, string Password)
{
try
{
ParseUser User = await ParseUser.LogInAsync(UserName, Password);
System.Windows.Forms.MessageBox.Show(User.ObjectId);
var currentUser = ParseUser.CurrentUser;
return true;
}
catch (Exception ex)
{
System.Windows.Forms.MessageBox.Show(ex.Message);
return false;
}
}
调用时收到错误。
private void btnLogin_Click(object sender, EventArgs e)
{
if (Login(txtUserName.Text,txtPassword.Text))
{
MessageBox.Show("Login Success");
}
}
答案 0 :(得分:6)
您需要异步等待Login
方法,如下所示:
private async void btnLogin_Click(object sender, EventArgs e)
{
if (await Login(txtUserName.Text,txtPassword.Text))
{
MessageBox.Show("Login Success");
}
}
现在,此事件处理程序是异步的(使用async
关键字)并异步等待Login
方法(使用await
关键字)。
请注意,一般情况下,建议不要使用async void
方法。但是,此规则的一个例外是事件处理程序。所以这段代码很好。
答案 1 :(得分:2)
您需要异步等待如下所示的方法:
private async void btnLogin_Click(object sender, EventArgs e) {
var task = Login(txtUserName.Text, txtPassword.Text)
var result = await task;
if (result) {
MessageBox.Show("Login Success");
}
}