/// <devdoc> /// <para>Generates a byte array or downloads data to an open file stream</para> /// </devdoc> private byte[] DownloadBits(WebRequest request, Stream writeStream, CompletionDelegate completionDelegate, AsyncOperation asyncOp) { WebResponse response = null; DownloadBitsState state = new DownloadBitsState(request, writeStream, completionDelegate, asyncOp, m_Progress, this); if (state.Async) { request.BeginGetResponse(new AsyncCallback(DownloadBitsResponseCallback), state); return null; } else { response = m_WebResponse = GetWebResponse(request); } bool completed; int bytesRead = state.SetResponse(response); do { completed = state.RetrieveBytes(ref bytesRead); } while (!completed); state.Close(); return state.InnerBuffer; }
private static void DownloadBitsReadCallbackState(DownloadBitsState state, IAsyncResult result) { Stream readStream = state.ReadStream; Exception exception = null; bool flag = false; try { int bytesRetrieved = 0; if ((readStream != null) && (readStream != Stream.Null)) { bytesRetrieved = readStream.EndRead(result); } flag = state.RetrieveBytes(ref bytesRetrieved); } catch (Exception exception2) { flag = true; if (((exception2 is ThreadAbortException) || (exception2 is StackOverflowException)) || (exception2 is OutOfMemoryException)) { throw; } exception = exception2; state.InnerBuffer = null; if (!(exception2 is WebException) && !(exception2 is SecurityException)) { exception = new WebException(SR.GetString("net_webclient"), exception2); } AbortRequest(state.Request); if ((state != null) && (state.WriteStream != null)) { state.WriteStream.Close(); } } finally { if (flag) { if (exception == null) { state.Close(); } state.CompletionDelegate(state.InnerBuffer, exception, state.AsyncOp); } } }
static private void DownloadBitsReadCallbackState(DownloadBitsState state, IAsyncResult result) { Stream stream = state.ReadStream; Exception exception = null; bool completed = false; try { int bytesRead = 0; if (stream != null && stream != Stream.Null) bytesRead = stream.EndRead(result); completed = state.RetrieveBytes(ref bytesRead); } catch (Exception e) { completed = true; if (e is ThreadAbortException || e is StackOverflowException || e is OutOfMemoryException) { throw; } exception = e; state.InnerBuffer = null; if (!(e is WebException || e is SecurityException)) { exception = new WebException(SR.GetString(SR.net_webclient), e); } AbortRequest(state.Request); if(state != null && state.WriteStream != null){ state.WriteStream.Close(); } } finally { if (completed) { if(exception == null){ state.Close(); } state.CompletionDelegate(state.InnerBuffer, exception, state.AsyncOp); } } }
private byte[] DownloadBits(WebRequest request, Stream writeStream, CompletionDelegate completionDelegate, AsyncOperation asyncOp) { WebResponse response = null; DownloadBitsState state = new DownloadBitsState(request, writeStream, completionDelegate, asyncOp, this.m_Progress, this); if (state.Async) { request.BeginGetResponse(new AsyncCallback(WebClient.DownloadBitsResponseCallback), state); return null; } response = this.m_WebResponse = this.GetWebResponse(request); int bytesRetrieved = state.SetResponse(response); while (!state.RetrieveBytes(ref bytesRetrieved)) { } state.Close(); return state.InnerBuffer; }