예제 #1
0
        /// <summary>
        /// Inicia o processo da requisição de forma assincrona.
        /// </summary>
        /// <param name="method">Método que será usado.</param>
        /// <param name="uri">Uri onde a requisição será realizada.</param>
        /// <param name="headers">Cabeçalhos da requisição.</param>
        /// <param name="parameter">Parametro que será enviado.</param>
        /// <param name="callback"></param>
        /// <param name="state"></param>
        /// <returns></returns>
        public IAsyncResult BeginRequest(string method, Uri uri, System.Collections.Specialized.NameValueCollection headers, IRequestParameter parameter, AsyncCallback callback, object state)
        {
            var asyncResult = new Threading.AsyncResult <RequestResult>(callback, state);
            var req         = GetWebRequest(method, uri, headers, parameter);

            _currentRequest = req;
            if (parameter != null)
            {
                req.ContentType   = parameter.ContentType;
                req.ContentLength = parameter.ContentLength;
                req.BeginGetRequestStream(GetRequestStreamHandle, new object[] {
                    req,
                    parameter,
                    asyncResult
                });
                return(asyncResult);
            }
            else
            {
                req.BeginGetResponse(GetResponseHandle, new object[] {
                    req,
                    asyncResult
                });
            }
            return(asyncResult);
        }
예제 #2
0
        public IAsyncResult BeginGetAssemblyPackages(IEnumerable <AssemblyPart> assemblyParts, AsyncCallback callback, object state)
        {
            var asyncResult = new Threading.AsyncResult <AssemblyPackageContainer>(callback, state);
            var arguments   = new object[] {
                asyncResult,
                assemblyParts
            };

            if (!System.Threading.ThreadPool.QueueUserWorkItem(DoGetAssemblyPackages, arguments))
            {
                DoGetAssemblyPackages(arguments);
            }
            return(asyncResult);
        }
예제 #3
0
        public AssemblyPackageContainer GetAssemblyPackages(IEnumerable <AssemblyPart> assemblyParts)
        {
            var allDone     = new System.Threading.ManualResetEvent(false);
            var asyncResult = new Threading.AsyncResult <AssemblyPackageContainer>(ar => {
                try
                {
                    allDone.Set();
                }
                catch (System.IO.IOException)
                {
                    try
                    {
                        allDone.Dispose();
                    }
                    catch
                    {
                    }
                }
            }, null);
            var arguments = new object[] {
                asyncResult,
                assemblyParts
            };

            DoGetAssemblyPackages(arguments);
            try
            {
                allDone.WaitOne();
            }
            catch (ObjectDisposedException)
            {
            }
            if (asyncResult.Exception != null)
            {
                throw asyncResult.Exception;
            }
            return(asyncResult.Result);
        }
예제 #4
0
 /// <summary>
 /// Construtor padrão.
 /// </summary>
 /// <param name="owner"></param>
 /// <param name="packages"></param>
 /// <param name="ar"></param>
 public DownloaderState(AssemblyRepository owner, IEnumerable <IAssemblyPackage> packages, Threading.AsyncResult <AssemblyPackageContainer> ar)
 {
     this.Owner       = owner;
     this.Packages    = packages;
     this.AsyncResult = ar;
 }