В настоящее время я работаю над доказательством применения концепции с использованием бесплатной пробной версии Xamarin, и я столкнулся с довольно интересной небольшой проблемой ... Вот код, который я использую в портативной библиотеке классов:Wait Handles and Xamarin Forms
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;
}
}
}
по сути, я просто хочу, чтобы позвонить против WebService и получить ответ, но я с Xamarin отметить, что я не в состоянии сделать это, используя хороший метод старый GetResponse()
, и должны использовать BeginGetResponse()
и EndGetResponse()
вместо этого, с старый IAsyncResult
рисунок. Shizzle.
В любом случае, моя проблема заключается в том, что код, следующий за моим ожиданием на waitHandle
, выполняется перед кодом в обратном вызове, и я не понимаю, почему. Это именно то, что у нас есть для ручки ожидания!
Может ли кто-нибудь определить, что я уверен, окажется простой ошибкой простака?
Проблема заключается в том, что (и я с поправками на мой вопрос, соответственно) код Я показал, что вы находитесь в переносной библиотеке классов, что означает, что GetRes ponseAsync и т. д. недоступен. Буквально единственный вариант, который у меня есть, - BeginGetResponse и EndGetResponse ... –
Нет, у вас есть больше возможностей. Вы можете использовать 'System.Net.Http.HttpClient' с' async'/'await'. Это обычный способ в Xamarin для comsume webservices, как показано в учебниках. – Wosi
Спасибо, я дам вам вихрь и вернусь к вам ... –