2009-04-02 5 views
2

XML 파일에 데이터를 쓰는 다음 코드가 있습니다.진행 표시 줄이 업데이트되지 않습니다.

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; 
      } 
     } 
    } 

데이터베이스에서 데이터를 가져 오는 것과 동일한 BackgroundWorker를 사용합니다. 진행률 표시 줄에 데이터베이스에서 읽는 동안 진행률이 제대로 표시됩니다. 그러나 XML 작성을위한 진행률 표시 줄을 초기화 한 후에는 프로세스가 올바르게 완료 되었더라도 단순히 0에 있습니다.

누구나 제안 할 수 있습니까?

+1

연결을 통해 xml을 작성하는 것은 매우 위험합니다. XmlWriter를 사용하는 것이 훨씬 안전합니다. 그렇지 않으면 이스케이프 처리가 큰 문제가됩니다. –

답변

5

필자가 백분율을 원한다고 가정하면 (count * 100)/고객이어야한다고 생각합니다.

+1

누군가가 상향 투표를하지 않고 답을 수락하면 그것을 좋아하지 않습니까? –

6

(count/customers)가 0으로 절단 될 수 있습니까? (두 정수 사이의 나누기)?

+0

이 대답에 투표했는데 – RvdK

0

이것은 스레딩과 관련이 있습니다. 왜냐하면 당신은 당신의 작업이 완료되는 것과 같은 스레드에서 GUI를 업데이트하기 때문입니다.

작업이 완료되면 진행률 표시 줄이 채워 집니까?

Hmmmzz, 당신은 거기에 bw를 사용하고 있습니다 ... 그래서 당신의 backgroundworker 프로세스 수 있습니다.

+0

OP는 BackgroundWorker를 나타내며 UI 업데이트가 작업자 스레드에 표시되지 않습니다. 내 돈은 제로에있다 (요한의 대답). –

+0

예, 작업이 완료되는 동안 GUI가 업데이트되지 않습니다. – Bailz

관련 문제