Esempio n. 1
0
        private void ResponseDownloadCompleted(IAsyncResult result)
        {
            AsyncDownloadArgs asyncArgs = (AsyncDownloadArgs)result.AsyncState;
            ConnectionState state = ConnectionState.Success;
            Exception dlException = null;
            int size = 0;
            System.IO.Stream res = null;

            if (!asyncArgs.TimedOut)
            {
                try
                {
                    using (HttpWebResponse resp = (HttpWebResponse)asyncArgs.WR.EndGetResponse(result))
                    {
                        using (System.IO.Stream stream = resp.GetResponseStream())
                        {
                            res = MyHelper.CopyStream(stream);
#if !(NETFX_CORE)
                            resp.Close();
#else
                            resp.Dispose();
#endif
                            if (res != null && res.CanSeek) int.TryParse(res.Length.ToString(), out size);
                        }
                    }
                }
                catch (WebException ex)
                {
                    state = ConnectionState.ErrorOccured;
                    if (ex.Status == WebExceptionStatus.RequestCanceled)
                        state = ConnectionState.Canceled;
                    dlException = ex;
                }
                catch (Exception ex)
                {
                    state = ConnectionState.ErrorOccured;
                    dlException = this.GetOrCreateWebException(ex);
                }
            }
            else
            {
                state = ConnectionState.Timeout;
            }


            this.RemoveDownload(asyncArgs.WR);

            ConnectionInfo conn = new ConnectionInfo(state, dlException, asyncArgs.Timeout, size, asyncArgs.StartTime, DateTime.UtcNow);

            StreamResponse strResp = new StreamResponse(conn, res);
#if !(NETFX_CORE)
            System.ComponentModel.AsyncOperationManager.CreateOperation(this).Post(new System.Threading.SendOrPostCallback(delegate(object obj)
            {
                object[] arr = (object[])obj;
                RaiseAsyncDownloadCompleted((StreamResponse)arr[0], arr[1]);

            }), new object[] {
                    strResp,
                    asyncArgs.UserArgs
                });
#else
            RaiseAsyncDownloadCompleted(strResp, asyncArgs.UserArgs);
#endif
        }
Esempio n. 2
0
 protected abstract void RaiseAsyncDownloadCompleted(StreamResponse response, object userArgs);