/// <summary> /// Asynchronously downloads an image from the specified url /// </summary> /// <param name="url"></param> /// <param name="callback">A <see cref="DownloadImageCompletedCallback"/> to be invoked when the request is completed</param> /// <param name="userState">A state object to be returned to the callback</param> /// <returns></returns> public object DownloadImageAsync(string url, DownloadImageCompletedCallback callback, object userState) { string urlValidationError; if (!IsValidURL(url, out urlValidationError)) { throw new ArgumentException(urlValidationError); } ImageRequestAsyncState state = new ImageRequestAsyncState(callback, DownloadImageAsyncCompleted, userState); HttpWebServiceRequest request = GetRequest(); request.GetResponseAsync(url, new MemoryStream(), IMAGE_ACCEPT, null, state); return(request); }
/// <summary> /// Callback method for asynchronous requests /// </summary> private void DownloadImageAsyncCompleted(WebRequestAsyncState state) { ImageRequestAsyncState requestState = (ImageRequestAsyncState)state; Image imageResult = null; try { if (!requestState.Request.Cancelled && requestState.Error == null) { imageResult = GetImage(requestState.Request); } } catch (HttpWebServiceException ex) { requestState.Error = ex; if (requestState.Request.ResponseStream != null) { requestState.Request.ResponseStream.Close(); } } requestState.DownloadImageCompleted(new DownloadImageAsyncResult(imageResult, requestState.Error), requestState.UserState); }