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

72qzrwbm  于 2023-05-18  发布在  其他
关注(0)|答案(3)|浏览(123)

这是我创建的异步函数,这里得到错误,而claaing这个函数在按钮点击。

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

insrf1ej1#

你需要像这样异步等待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方法。但是,此规则的一个例外是事件处理程序。所以这个代码很好。

f4t66c6m

f4t66c6m2#

需要异步等待方法,如下所示:

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

i34xakig3#

从sync方法调用async方法:

var task = Task.Run(() => Login(txtUserName.Text, txtPassword.Text)).Result;

相关问题