示例#1
0
 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
     });
 }
示例#2
0
 public static void DownloadStringAsync2(this WebClient request, Uri address, DownloadStringCompletedEventHandler2 callback)
 {
     request.DownloadStringAsync2(address, callback, null);
 }
示例#3
0
 public static void DownloadStringAsync2(this WebClient request, Uri address, DownloadStringCompletedEventHandler2 callback, object userToken)
 {
     request.DownloadStringAsync2Internal(address, callback, userToken, 1);
 }