0

私はWindows8用のアプリに取り組んでいます。「User」という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()返品する必要があります。 返される(コンパイラによって生成される)は、非同期操作のステータスに関する情報を提供します。Taskvoid
Task

イベントハンドラメソッドも作成する必要がありasyncます。その後、他の方法の結果を
得ることができます。awaitasync


async void一般に、イベントハンドラー以外のメソッドは使用しないでください。

于 2012-10-21T14:40:02.760 に答える