Пример #1
0
        private void exportBackgroundWorker_DoWork(object sender, DoWorkEventArgs e)
        {
            int i = 0;                                                  // ファイルにエクスポートが完了した行数。
            int tmppercentage = 0;                                      // ファイルのエクスポートが完了した行数。
            int percentage = 0;                                         // ファイルのエクスポートが完了する前のtmppercentageの値。

            int bgWorkArg = (int)e.Argument;                            // ファイルの総数を受け取る。
            BackgroundWorker worker = (BackgroundWorker)sender;         // senderの値はbgWorkerの値と同じ。
            Encoding encode = Encoding.GetEncoding("Shift_JIS");        // エクスポートするファイルをShift_JISにエンコードするため、Shift_JIS用のEncodingオブジェクトを取得する。

            using (StreamWriter streamWrite = new StreamWriter(userconfig.ExportCsv, false, encode))
            {
                foreach (ReportItemCollection itemcollect in reportItemCollectionList)
                {
                    if (worker.CancellationPending)                     // 処理中にキャンセルされたか確認。
                    {
                        e.Cancel = true;                                // キャンセルされた場合は制御を戻す。(eはDoWorkEventArgsクラスのインスタンス)
                        return;
                    }

                    ConversionRegular convertString = new ConversionRegular();      // ConversionRegularインスタンス(改行文字の置き換えを行う)作成。
                    convertString.TextExtpotConvert(itemcollect.ItemContent);       // 改行文字を特殊な置き換え文字に変更する。

                    string _tmpString = string.Format("{0},{1},{2},{3},{4},{5}", itemcollect.ItemTitle, itemcollect.ItemDate, itemcollect.ItemType, convertString.ExportString, itemcollect.AlarmOrNotFlag, userconfig.AlarmType);
                    streamWrite.WriteLine(_tmpString);                      // Listインスタンスの各ReportItemCollectionオブジェクトを規定のフォーマットに変換後、ファイルストリームに書き込む。

                    i++;                                                    // ファイルにエクスポートが完了したら、カウンタを増やす。
                    tmppercentage = i * 100 / bgWorkArg;                   // CSVファイルへ書き込んだ行数をパーセンテージに計算。
                    if (percentage < tmppercentage)                        // CSVファイルへ書き込んだ行数が、既に書き込んだ行数よりも多ければ
                    {
                        percentage = tmppercentage;                             // 現在書き込んだ行数を以前までに完了している書き込んだ行数に代入する。
                        worker.ReportProgress(percentage);                      // パーセンテージをProgressChangedメソッドへ渡す。
                    }
                    //Thread.Sleep(1);                                            // 意図的な待機時間。
                }
                e.Result = "エクスポートが完了しました。";                  // 処理が完了した際RunWorkerCompletedイベントハンドラへ渡す。
            }
        }