3

BackgroundWorker.DoWorkイベントでworker.ReportProgress() を呼び出すと、機能せず、イベントはループProgressChangedの最後でのみ発生します。for

private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
    string writePath = Path.Combine(bookPath, "bytes");
    DataTable dt = new DataTable();
    dt = Form1.book.Select("select * from book");
    Directory.CreateDirectory(writePath);
    foreach (DataRow dr in dt.Rows)
    {
        int pagenumber = Convert.ToInt32(dr["pageNumber"]);
        string text = dr["text"].toString();
        byte[] codes = tocode.convertTobyte(text.ToCharArray());

        File.WriteAllBytes(Path.Combine(writePath, pagenumber.ToString()),codes);
        backgroundWorker1.ReportProgress((pagenumber * 100) / dt.Rows.Count);
    }
}

private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
     progressBarMain.Value = e.ProgressPercentage;
}
4

0 に答える 0