我可能盯着相同的代码太久了,但似乎无法让Progressbar在下面的代码中工作。有人提示吗?

private void doBackgroundTIFConverter(object sender, DoWorkEventArgs e)
{
    string tifFileName = (string)e.Argument;
    bm = new Bitmap(tifFileName);
    int total = bm.GetFrameCount(FrameDimension.Page);
    document.Open();
    cb = writer.DirectContent;
    for (int k = 0; k < total; ++k)
    {
        backgroundTIFConverter.ReportProgress(k / total * 100);
        bm.SelectActiveFrame(FrameDimension.Page, k);
        iTextSharp.text.Image img = iTextSharp.text.Image.GetInstance(bm, ImageFormat.Bmp);
        // scale the image to fit in the page
        img.ScalePercent(72f / img.DpiX * 100);
        img.SetAbsolutePosition(0, 0);
        cb.AddImage(img);
        document.NewPage();
    }
    bm.Dispose();
    document.Close();
}

private void progressBackgroundTIFConverter(object sender, ProgressChangedEventArgs e)
{
    splitProgressBar.Value = e.ProgressPercentage;
}

private void completedBackgroundTIFConverter(object sender, RunWorkerCompletedEventArgs e)
{
    splitButton.Enabled = true;
}


private void completedBackgroundTIFConverter(object sender, RunWorkerCompletedEventArgs e)
{
    splitButton.Enabled = true;
}

最佳答案

backgroundTIFConverter.ReportProgress(k / total * 100);

这是一个非常常见的C#陷阱,您将在此处获得整数除法。 k/总将始终为零。将表达式重新排序为:
backgroundTIFConverter.ReportProgress(k * 100 / total);

如果要达到100%,则从总数中减去1:k * 100/(总计1)

关于c# - 进度栏不报告进度,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12166322/

10-11 22:40
查看更多