更新:让它工作更新了我的工作代码
这是我到目前为止所拥有的
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#什么都不知道是否有人可以提供帮助
答案 0 :(得分:7)
我猜您使用的是DotNetZip?
您展示的代码中存在许多问题:
DoWork
中致电ReportProgress,那么您希望如何取得进展?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();
}
});
}
这样做,您的用户界面就不会冻结,您会定期收到进度报告。
始终首选BackgroundWorker
以上的任务,因为现在使用官方方法。