【发布时间】:2012-04-26 05:49:19
【问题描述】:
我正在使用 webrequest 来获取一些图像数据。该网址有时可能无效。如果 URL 无效,begingetresponse 需要的时间等于超时时间。在此期间,控件也变得无响应。换句话说,异步回调不是异步工作的。这是预期的行为吗?
try
{
// Async requests
WebRequest request = WebRequest.Create(uri);
request.Timeout = RequestTimeOut;
RequestObject requestObject = new RequestObject();
requestObject.Request = request;
request.BeginGetResponse(this.ProcessImage, requestObject);
}
catch (Exception)
{
ShowErrorMessage(uri);
}
private void ProcessImage(IAsyncResult asyncResult)
{
try
{
RequestObject requestObject = (RequestObject)asyncResult.AsyncState;
WebRequest request = requestObject.Request;
WebResponse response = request.EndGetResponse(asyncResult);
Bitmap tile = new Bitmap(response.GetResponseStream());
// do something
}
catch (Exception)
{
ShowErrorMessage();
}
}
【问题讨论】:
-
不,如果您使用 BeginGetResponse,预期的行为将是 UI 保持响应。您能否向我们展示您调用 BeginGetResponse 的代码的 sn-p?
-
您有什么方法可以在发送之前验证该网址吗?我认为您请求的服务器对您来说是一个黑匣子,无权访问该代码?
-
我认为我必须在使用之前验证 URL,而不是盲目使用 URL。不得不写更多的代码:(
标签: c# .net visual-studio