2009-04-02 38 views
2

Ich habe den folgenden Codeabschnitt, um Daten in eine XML-Datei zu schreiben.Fortschrittsbalken wird nicht aktualisiert

private void WriteResidentData() 
{ 
    int count = 1; 
    status = "Writing XML files"; 
    foreach (Site site in sites) 
    { 
      try 
      { 
       //Create the XML file 
       StreamWriter writer = new StreamWriter(path + "\\sites\\" + site.title + ".xml"); 
       writer.WriteLine("<?xml version=\"1.0\" encoding=\"ISO-8859-1\" ?>"); 
       writer.WriteLine("<customer_list>"); 

       foreach (Resident res in site.GetCustomers()) 
       { 
        bw.ReportProgress((count/customers) * 100); 
        writer.WriteLine("\t<customer>"); 
        writer.WriteLine("\t\t<customer_reference>" + res.reference + "</customer_reference>"); 
        writer.WriteLine("\t\t<customer_name>" + res.name + "</customer_name>"); 
        writer.WriteLine("\t\t<customer_address>" + res.address + "</customer_address>"); 
        writer.WriteLine("\t\t<payment_method>" + res.method + "</payment_method>"); 
        writer.WriteLine("\t\t<payment_cycle>" + res.cycle + "</payment_cycle>"); 
        writer.WriteLine("\t\t<registered>" + CheckWebStatus(res.reference) + "</registered>"); 
        writer.WriteLine("\t</customer>"); 
        count++; 
       } 

       writer.WriteLine("</customer_list>"); 
       writer.Close(); 
      } 
      catch (Exception ex) 
      { 
       lastException = ex; 
      } 
     } 
    } 

Es verwendet den gleichen BackgroundWorker, der die Daten aus der Datenbank bezieht. Mein Fortschrittsbalken zeigt den Fortschritt korrekt an, während er aus der Datenbank liest. Nach dem Nullstellen des Fortschrittsbalkens für das XML-Schreiben liegt es jedoch einfach bei 0, obwohl der Prozess korrekt abgeschlossen wurde.

Kann jemand vorschlagen, warum?

+1

Als eine Seite - Schreiben xml über Verkettung ist sehr gefährlich. Es wäre viel sicherer, XmlWriter zu verwenden - andernfalls wird das Entweichen ein großes Problem sein. –

Antwort

5

Ich denke, das sollte sein (Anzahl * 100)/Kunden, vorausgesetzt, Sie wollten einen Prozentsatz abgeschlossen.

+1

Liebst du es nicht, wenn jemand deine Antwort ohne Upvoting akzeptiert? –

6

Könnte es sein, dass (count/customers) auf Null gekürzt wird (Division zwischen zwei Ganzzahlen)?

+0

Ich stimme für diese Antwort – RvdK

0

Dies hat mit Threading zu tun. Weil Sie Ihre GUI im selben Thread aktualisieren, wie Ihre Arbeit ausgeführt wird.

Wird der Fortschrittsbalken gefüllt, wenn die Aufgabe vollständig abgeschlossen ist?

Hmmmzz, du verwendest ein bw da drin ... das könnte dein Hintergrundarbeiter-Prozess sein.

+0

Die OP besagt, dass BackgroundWorker, und keine UI-Aktualisierung auf dem Arbeitsthread angezeigt wird. Mein Geld ist auf Null gestellt (Johans Antwort). –

+0

Ja, die GUI wird nicht aktualisiert, während die Arbeit getan wird. – Bailz

Verwandte Themen