我使用HttpWebRequest
访问网站并检索一些数据,并且在检索所述数据时我需要UIAlertView
并显示UIActivityIndicatorView
。但是,它只是使屏幕变暗,并且在为时已晚之前不会显示警报。我在这里阅读了其他与线程相关的问题,但无法弄清楚如何解决这个问题。我尝试使用ThreadPool,InvokeOnMainThread,Tasks,所有这些都没有用。
编辑:
HttpWebRequest url = (HttpWebRequest)WebRequest.Create ("maps.googleapis.com/maps/api/place/search/..);
HttpWebResponse webResp = (HttpWebResponse)url.GetResponse (); JsonValue jVal =
JsonObject.Load (webResp.GetResponseStream ());
JsonObject jObj = (JsonObject)jVal;
我有上面的代码,如果它将为我正确格式化,我将如何转换为使用WebClient?你还能从中获得JSON等吗?
答案 0 :(得分:2)
使用WebClient
和其中一种*Async
方法比使用HttpWebRequest
更容易(并且不易出错)。
以下是下载并显示小图片的示例。
WebClient client = new WebClient ();
var wait = new UIActivityIndicatorView (View.Bounds);
client.DownloadDataCompleted += (object sender, DownloadDataCompletedEventArgs e) => {
byte[] result = e.Result;
if (result != null) {
NSData data = NSData.FromArray (e.Result);
UIImage img = UIImage.LoadFromData (data);
InvokeOnMainThread (delegate {
ShowImage (img);
wait.StopAnimating ();
});
}
};
wait.StartAnimating ();
client.DownloadDataAsync (new Uri (url));
编辑(更新问题)
对于流,您可以使用WebClient.OpenReadAsync
和OpenReadCompleted
事件。