【发布时间】:2022-12-03 01:49:29
【问题描述】:
我试图在 WinForms ProgressBar 上显示解压缩几个文件的进度。
在这里,我创建了一个 System.Progress 和一个更新进度条的处理程序
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);
这肯定是调用的,如果我为我的处理程序使用一个方法,每个文件都会命中断点(尽管我认为为时已晚)
我希望这会更新进度条。
我看到对话框,直到文件完全解压,上面有一个忙碌的光标,但进度没有增加。
我错过了什么?
【问题讨论】:
-
从另一个线程访问 UI 元素属性字段可能存在问题;尝试将修改 progressBar1 值的代码包装在调度程序中。
标签: c# asynchronous progress-bar threadpool