gpt4 book ai didi

C# : How to report progress while creating a zip file?

转载 作者:行者123 更新时间:2023-11-30 14:10:38 35 4
gpt4 key购买 nike

更新:让它工作更新了我的工作代码

这是我目前的情况

 private async void ZipIt(string src, string dest)
{
await Task.Run(() =>
{
using (var zipFile = new ZipFile())
{
// add content to zip here
zipFile.AddDirectory(src);
zipFile.SaveProgress +=
(o, args) =>
{
var percentage = (int)(1.0d / args.TotalBytesToTransfer * args.BytesTransferred * 100.0d);
// report your progress
pbCurrentFile.Dispatcher.Invoke(
System.Windows.Threading.DispatcherPriority.Normal,
new Action(
delegate()
{

pbCurrentFile.Value = percentage;
}
));
};
zipFile.Save(dest);
}
});
}

我需要弄清楚如何更新我的进度条,但不确定我是否走在正确的轨道上 我四处搜索并找到了许多 Windows 窗体和 vb.net 的示例,但没有找到 wpf c# 想知道是否有人可以提供帮助.

最佳答案

我猜你正在使用 DotNetZip?

您显示的代码中存在许多问题:

  • 你不调用ReportProgressDoWork 中,那么您希望如何取得进展?
  • 即使您这样做了,问题出在 zip.Save() 上,您也不会取得进展(超过 100%),因为除非完成,否则它不会返回。

解决方案

改为使用任务和 SaveProgress 事件:

private async void MainWindow_Loaded(object sender, RoutedEventArgs e)
{
await Task.Run(() =>
{
using (var zipFile = new ZipFile())
{
// add content to zip here
zipFile.SaveProgress +=
(o, args) =>
{
var percentage = (int) (1.0d/args.TotalBytesToTransfer*args.BytesTransferred*100.0d);
// report your progress
};
zipFile.Save();
}
});
}

这样做,您的 UI 将不会卡住,并且您会定期收到进度报告。

总是更喜欢 Tasks 而不是 BackgroundWorker,因为它是现在使用的官方方法。

关于C# : How to report progress while creating a zip file?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22976841/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com