2012-08-28 64 views
1

我可能一直在盯着相同的代码太长,但我似乎无法让进度条在下面的代码中工作。任何人有任何提示?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; 
} 

回答

9
backgroundTIFConverter.ReportProgress(k/total * 100); 

这是一个很常见的C#陷阱,你会得到整数除法这里。 k /总数将始终为零。重新排序的表达式:

backgroundTIFConverter.ReportProgress(k * 100/total); 

如果你想获得100%,那么从总量减去1:K * 100 /(总-1)

+0

+1伟大!!!这意味着有相同的优先级运行.......请告诉。 – perilbrain

+0

当然!谢谢! –