private static void DownloadStringAsync2Internal(this WebClient request, Uri address, DownloadStringCompletedEventHandler2 callback, object userToken, int attempt) { if (attempt == 1) { request.DownloadStringCompleted += delegate(object sender, DownloadStringCompletedEventArgs e) { if (e.Error != null && attempt == 1) { try { WebException ex = (WebException)e.Error; HttpWebResponse httpWebResponse = (HttpWebResponse)ex.Response; if (httpWebResponse.StatusCode == HttpStatusCode.ProxyAuthenticationRequired) { request.Proxy = new WebProxy(); request.UseDefaultCredentials = true; request.Proxy.Credentials = CredentialCache.DefaultCredentials; request.DownloadStringAsync2Internal(address, callback, userToken, ++attempt); return; } } catch { } } CallState callState = e.UserState as CallState; DownloadStringCompletedEventHandler2 downloadStringCompletedEventHandler = callState.Callback as DownloadStringCompletedEventHandler2; DownloadStringCompletedEventArgs2 e2 = new DownloadStringCompletedEventArgs2(e.Result, e.Error, e.Cancelled, callState.Data); downloadStringCompletedEventHandler(callState.Data, e2); }; } request.DownloadStringAsync(address, new CallState { Callback = callback, Data = userToken }); }
public static void DownloadStringAsync2(this WebClient request, Uri address, DownloadStringCompletedEventHandler2 callback) { request.DownloadStringAsync2(address, callback, null); }
public static void DownloadStringAsync2(this WebClient request, Uri address, DownloadStringCompletedEventHandler2 callback, object userToken) { request.DownloadStringAsync2Internal(address, callback, userToken, 1); }