Fly*_*ast 5 .net wcf windows-phone-8
我必须编写一个异步方法来与 Web 服务联系。这是我在 WebServiceHelper 类中的方法:
public static Task<int> SignIn(string username, string password)
{
try
{
TaskCompletionSource<int> tcs = new TaskCompletionSource<int>();
service.LoginCompleted += (object sender, WebService.LoginCompletedEventArgs e) =>
{
if (e.Error != null) tcs.SetResult(-1);
else
tcs.SetResult((int)e.Result);
};
service.LoginAsync(username, password);
return tcs.Task;
}
catch (Exception ex)
{
MessageBox.Show("Error: " + ex.Message);
return null;
}
}
Run Code Online (Sandbox Code Playgroud)
然后我在一个按钮点击事件中调用它,如下所示:
private async void btLogIn_Click(object sender, RoutedEventArgs e)
{
try
{
int si = await WebServiceHelper .SignIn(tbUsername.Text, tbPassword.Text);
if (si != 0) MessageBox.Show("Signed in successfully!");
else MessageBox.Show("Couldn't sign in");
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
Run Code Online (Sandbox Code Playgroud)
我第一次单击该按钮时效果很好,但是当我再次单击时,出现错误:“InvalidOperationException,尝试将任务转换为已完成的最终状态。”
我做了一些小搜索,在这里找到了一些东西:任务似乎自动启动
我知道我应该在重新开始之前做一些事情来停止这个过程,但我不知道如何以及为什么。有人可以为我解释一下吗?
| 归档时间: |
|
| 查看次数: |
2406 次 |
| 最近记录: |