/// <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); }
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); }
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); }
/// <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; }