我目前正在使用Xamarin免费试用版进行概念验证应用程序,我遇到了一个相当有趣的小问题......以下是我在可移植类库中使用的代码:
using System;
using System.Net;
using Newtonsoft.Json;
namespace poc
{
public class CurrentWeatherInformation
{
public string WeatherText { get; set; }
public CurrentWeatherInformation (string cityName)
{
// api.openweathermap.org/data/2.5/weather?q=Leeds
var request = (HttpWebRequest)WebRequest.Create(string.Format("http://api.openweathermap.org/data/2.5/weather?q={0}", cityName));
request.ContentType = "application/json";
request.Method = "GET";
object state = request;
var ar = request.BeginGetResponse (WeatherCallbackMethod, state);
var waitHandle = ar.AsyncWaitHandle as System.Threading.ManualResetEvent;
waitHandle.WaitOne();
}
public void WeatherCallbackMethod(IAsyncResult ar)
{
object state = ar.AsyncState;
var request = state as HttpWebRequest;
var response = request.EndGetResponse(ar);
var data = new System.IO.StreamReader (response.GetResponseStream ()).ReadToEnd ();
this.WeatherText = data;
}
}
}
基本上,我只想打电话给网络服务并获得回复,但我注意到Xamarin我无法使用旧的GetResponse()
方法执行此操作,并且必须使用BeginGetResponse()
而EndGetResponse()
则采用旧的IAsyncResult
模式。 Shizzle。
无论如何,我的问题是我等待waitHandle
之后的代码正在回调中的代码之前执行,我不明白为什么。这正是我们的等待处理!
任何人都可以发现我肯定会被一个简单的错误证明是一个简单的错误吗?