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 のままになります。

誰でも理由を提案できますか?

4

3 に答える 3

6

(カウント / 顧客) がゼロ (2 つの整数の除算) に切り捨てられている可能性はありますか?

于 2009-04-02T12:26:41.123 に答える
5

パーセンテージを完了したいと仮定すると、それは (count*100)/customers になるはずです。

于 2009-04-02T12:43:39.240 に答える
0

これは、スレッド化に関係しています。作業が行われているのと同じスレッドで GUI を更新しているためです。

タスクが完全に完了すると、プログレスバーはいっぱいになりますか?

うーん、あなたはそこでbwを使用しています...だから、それはあなたのバックグラウンドワーカープロセスかもしれません。

于 2009-04-02T12:28:13.163 に答える