none
Auf Download warten (WebClient.DownloadStringAsync()) RRS feed

  • Frage

  • Hallo,

    ich bin beim entwickeln meiner ersten WP7 App auf ein Problem gestoßen, für das ich Hilfe benötige. Mal eine kurze Beschreibung, was ich machen möchte:

     Eine Klasse XMLParse kümmert sich um den Download und die Auswertung einer XML Datei. Wenn ich eine Instanz von XMLParse erstelle, übergebe ich den Link und der Konstruktor startet den Download. Außerdem enthält XMLParse eine Methode getCourse(), die die XML Datei auswertet und mir den Inhalt zurückgibt.

    Hier mal der Code von XMLParse.cs:

    public class XMLParse 

     

     

    {

     

     

         private WebClient client = new WebClient();

     

     

         private string xmlData;


         public XMLParse(string uri)

          {

              client.DownloadStringCompleted += (sender, e) =>

               {

                    if (e.Error == null && !e.Cancelled)

                    {

                        xmlData = e.Result;

                   }

              };

     

              client.DownloadStringAsync(new Uri(uri));

         }

       

         public Course getCourse()

         {

              Course example;

              XDocument xmlDoc = XDocument.Parse(xmlData);

     

              var _course = from course in xmlDoc.Descendants("course")

                            select new

     

     

     

                            {

                                 Name = course.Element("course_name").Value,

                                 Semester = course.Element("semester").Value,

                            };

              foreach (var course in _course)

              {

                   example = new Course(course.Name, course.Semester);

              }


              return example;

         }

    }

    So weit läuft das auch alles, wie ich es mir vorstelle, jedoch bekomme ich einen Fehler, wenn ich mit folgendem Code ein XMLParse Objekt erstelle und getCourse() aufrufe:

    XMLParse course = new XMLParse("http://www.test.com/example.xml");

    course.getCourse();

     

     

    Das Problem ist, dass der Download nebenläufig zum restlichen Programm abläuft und einfach noch nicht fertig ist, wenn getCourse aufgerufen wird.

    Nun zu meiner Frage: Wie schaffe ich es, dass die Zeile "course.getCourse();" darauf wartet, dass der Download abgeschlossen ist?

    Für jegliche Hilfe bin ich sehr dankbar!

    Gruß Tim

    Montag, 12. Dezember 2011 12:18

Antworten

  • In dem du ein Event z.B. "Completed" in der XmlParse Klasse implementierst, dass du dann auslöst, wenn client.DownloadStringCompleted fertig ist.
    Danach erstellst du ein EventHandler in der aufrufenden Klasse und rufst die Methode course.getCourse() darin auf.

    • Als Antwort vorgeschlagen Orbb Montag, 12. Dezember 2011 20:25
    • Als Antwort markiert Robert Breitenhofer Dienstag, 13. Dezember 2011 13:15
    Montag, 12. Dezember 2011 17:41

Alle Antworten

  • In dem du ein Event z.B. "Completed" in der XmlParse Klasse implementierst, dass du dann auslöst, wenn client.DownloadStringCompleted fertig ist.
    Danach erstellst du ein EventHandler in der aufrufenden Klasse und rufst die Methode course.getCourse() darin auf.

    • Als Antwort vorgeschlagen Orbb Montag, 12. Dezember 2011 20:25
    • Als Antwort markiert Robert Breitenhofer Dienstag, 13. Dezember 2011 13:15
    Montag, 12. Dezember 2011 17:41
  • Danke für die Hilfe! Hat funktioniert!
    Montag, 12. Dezember 2011 18:21
  • Hallo Tim G. Keller,

    Schau Dir mal die Variante mit public HttpWebRequest AsyncWebRequest { get; set; } und  public HttpWebResponse AsyncWebResponse an. Vielliecht kann sie Dir weiterhelfen.

    IAsyncResult Beispiel Code

    Grüße,

    Robert


    Dienstag, 13. Dezember 2011 13:14