我试图在WinForms ProgressBar上显示解压缩几个文件的进度。
在这里,我创建了一个System.Progress,它带有一个更新ProgressBar的处理程序
Progress<int> progress = new Progress<int>(value => {
progressBar1.Value = value; progressBar1.Update(); });
然后将函数移交给线程池。
Task t = Task.Run(() => FileUtils.UnzipTo(targetDir,
sourceDir, false, progress));
t.Wait();
在我的解压函数中,我对归档中的每个文件都这样做:
progress.Report(++complete / total * 100);
这是明确调用,如果我使用一个方法为我的处理程序,断点是命中每个文件(虽然太晚了,我认为)
我希望这能更新ProgressBar。
我看到对话框,直到文件完全解压缩,上面有一个忙碌的光标,但没有增加进度。
我错过了什么?
1条答案
按热度按时间e3bfsja21#
我认为“你缺少的”是表达式
progress.Report(++complete / total * 100)
中的整数除法。当我复制这个问题时,这个表达式总是求值为零,除非total
变量被转换为浮点变量类型。除此之外,我能够重现一个模拟版本的代码与预期的结果。