如何调用async Task <bool>方法?

时间:2015-12-31 10:06:14

标签: c# winforms parse-platform

这是我创建的异步功能,这里在点击这个功能时遇到错误。

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");                       
        }            
    }

2 个答案:

答案 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");
 }
}