我使用从样本here获取的代码在WP8应用中调用Web服务:
public static Task<User> GetUser(string code)
{
TaskCompletionSource<User> tcs = new TaskCompletionSource<User>();
WS.SoapClient ws = new WS.SoapClient();
ws.MethodCompleted += (s, e) =>
{
if (e.Error == null)
{
tcs.SetResult(e.Result);
}
else
{
tcs.SetException(e.Error);
}
};
ws.MethodAsync(code);
return tcs.Task;
}
我await
使用GetUser
方法,这很好用。
问题是,MethodCompleted
处理程序为每个MethodAsync
调用触发两次。
第二个调用没有控制'owner',因此,从SetResult
返回时,应用程序本身会抛出'对象引用未设置为实例'异常。
任何想法在这里发生了什么,以及我如何克服它?