我正在开发一个适用于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方法来完成它的执行。但是,我不知道该怎么做。我做错了什么?
谢谢
答案 0 :(得分:1)
首先,您需要Authenticate()
返回Task
而不是void
返回的Task
(由编译器生成)将为您提供有关异步操作状态的信息。
您还需要制作事件处理程序方法async
然后,您可以await
使用其他async
方法的结果。
一般情况下,除非作为事件处理程序,否则不应使用async void
方法。