2010-11-10 8 views
0

J'ai travaillé avec la classe AsyncEnumerator pour aider à nettoyer mon code asynchrone. Le problème est le code après que le retour de rendement ne se déclenche jamais. L'interface utilisateur appelle un objet qui appelle l'objet HttpWorker lorsqu'un clic est effectué sur un bouton. Peu importe à quel point le bouton est cliqué, le code ne dépasse jamais le rendement du rendement.Travailler avec AsyncEnumerator

public void ReadFromUrl(string Url) 
    { 
     AsyncEnumerator asyncEnum = new AsyncEnumerator(); 
     asyncEnum.BeginExecute(GetData(asyncEnum,Url), asyncEnum.EndExecute); 
    } 

    private IEnumerator<Int32> GetData(AsyncEnumerator AsyncEnum, String Url) 
    { 
     url = Url; 
     request = (HttpWebRequest)WebRequest.Create(url); 

     request.CookieContainer = new CookieContainer(); 
     request.AllowAutoRedirect = true; 
     request.UserAgent = "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.0.6) Gecko/20060728 Firefox/1.5.0.6"; 

     request.BeginGetResponse(AsyncEnum.End(), null); 
     AsyncEnum.SyncContext = null; 
     yield return 1; 

     response = (HttpWebResponse)request.EndGetResponse(AsyncEnum.DequeueAsyncResult()); 


     if (response.StatusCode == HttpStatusCode.OK) 
     { 
      // Create the stream, encoder and reader. 
      Stream responseStream = response.GetResponseStream(); 
      Encoding streamEncoder = Encoding.UTF8; 
      StreamReader responseReader = new StreamReader(responseStream, streamEncoder); 
      responseAsString = responseReader.ReadToEnd(); 
     } 
     else 
     { 
      throw new Exception(String.Format("Response Not Valid {0}", response.StatusCode)); 
     } 

    } 
+1

Je ne vois rien de mal. Assurez-vous de définir un point d'arrêt après le * yield *, le stepping ne fonctionnera pas. –

+0

Vous mon ami, êtes une légende! – deanvmc

Répondre

0

Il n'y avait rien de mal sauf mon utilisation de débogage!