У меня есть класс, который идет и захватывает некоторые данные и возвращает его как строку. Пока этот объект работает, есть значок поворота, позволяющий пользователю знать, что работа выполняется. Проблема в том, что код выходит до ответа. Я застрялАльтернатива этому запросу Http
while(response == null)
только, чтобы видеть, что происходит и
response = (HttpWebResponse)request.EndGetResponse(AsyncResult);
не стреляя. Он стреляет нормально в консольном приложении, поэтому я кладу это вниз к чему-то, что я делаю, что Silverlight не нравится, Херес полного кода:
public class HttpWorker
{
private HttpWebRequest request;
private HttpWebResponse response;
private string responseAsString;
private string url;
public HttpWorker()
{
}
public string ReadFromUrl(string Url)
{
url = Url;
request = (HttpWebRequest)WebRequest.Create(url);
request.CookieContainer = new CookieContainer();
request.AllowAutoRedirect = true;
request.UserAgent = "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.0.6) Gecko/20060728 Firefox/1.5.0.6";
AsyncRequest(); // The Demon!
return responseAsString;
}
private void AsyncRequest()
{
request.BeginGetResponse(new AsyncCallback(FinaliseAsyncRequest), null);
}
private void FinaliseAsyncRequest(IAsyncResult AsyncResult)
{
response = (HttpWebResponse)request.EndGetResponse(AsyncResult);
if (response.StatusCode == HttpStatusCode.OK)
{
// Create the stream, encoder and reader.
Stream responseStream = response.GetResponseStream();
Encoding streamEncoder = Encoding.UTF8;
StreamReader responseReader = new StreamReader(responseStream, streamEncoder);
responseAsString = responseReader.ReadToEnd();
}
else
{
throw new Exception(String.Format("Response Not Valid {0}", response.StatusCode));
}
}
}
Хмм подвеска также остановит любую «ожидающую» графику или что у меня все получилось. Думаю, мне нужно перепроектировать. Я просто не уверен, как данные необходимы для продолжения работы с приложением. – deanvmc
Обратный вызов из 'HttpWebRequest' не выполняется в потоке пользовательского интерфейса. 'WebClient' запускает обратный вызов в потоке пользовательского интерфейса. –
Я запутался в ответе, как он мог вызвать FinaliseAsyncRequest изнутри ReadFromUrl? Запрос никогда не будет выпущен, верно? Я пытаюсь выполнить одно и то же, возвращая значение из метода, который делает запрос. – CACuzcatlan