我有一个类去抓取一些数据并将其作为字符串返回。当这个对象正在工作时,有一个让用户知道工作正在完成的旋转图标。问题是代码在响应返回之前退出。我坚持一个替代此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 2010-11-09 17:36:11
来自'HttpWebRequest'的回调不会在UI线程上执行。 'WebClient'触发它在UI线程上的回调。 – 2010-11-09 19:57:11
我对答案感到困惑,他如何从ReadFromUrl中调用FinaliseAsyncRequest?该请求不会被启动,对吧?我试图从发出请求的方法中返回一个值来完成同样的事情。 – CACuzcatlan 2010-11-19 00:17:00