0

我正在开发适用于 Windows 8 的应用程序。我有一个名为“用户”的 C# 类。用户有一个称为身份验证的方法。我的方法看起来像这样:

public class User
{
  public bool IsAuthenticated { get; set; }

  public async void Authenticate(string username, string password)
  {
    // Code to build parameters and url is here
    var response = await httpClient.PostAsync(myServiceUrl, new StringContent(json, String.Text.Encoding.UTF8, "application/json"));
    JsonObject result = JsonObject.Parse(await response.Content.ReadAsStringAsync());
  }
}

Authenticate 方法有效。它成功地击中了我的服务并返回了适当的细节。我的问题是,如何检测此方法何时完成?我正在调用此方法以响应用户单击我的应用程序中的“登录”按钮。例如,像这样:

private void loginButton_Click(object sender, RoutedEventArgs e)
{
  User user = new User();
  user.IsAuthenticated = false;
  user.Authenticate(usernameTextBox.Text.Trim(), passwordBox.Password.Trim());

  if (user.IsAuthenticated)
  {
    // Allow the user to enter
  }
  else
  {
    // Handle the fact that authentication failed
  }
}

本质上,我需要等待 authenticate 方法完成其执行。但是,我不知道该怎么做。我究竟做错了什么?

谢谢

4

1 回答 1

1

首先,您需要Authenticate()returnTask而不是void.
返回的Task(由编译器生成)将为您提供有关异步操作状态的信息。

您还需要创建事件处理程序方法async
然后,您可以await使用其他async方法的结果。


一般来说,你不应该使用async void除了作为事件处理程序之外的方法。

于 2012-10-21T14:40:02.760 回答