在WinRT中检测方法何时完成(C#)

时间:2012-10-21 14:38:38

标签: c# windows-runtime

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

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方法来完成它的执行。但是,我不知道该怎么做。我做错了什么?

谢谢

1 个答案:

答案 0 :(得分:1)

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

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


一般情况下,除非作为事件处理程序,否则不应使用async void方法。