这是代码,问题是如何跟踪完成后再运行其他内容?尝试将完成的zip复制到存储位置
private async void ZipFolder(string src, string dest, bool delete)
{
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()
{
lblCurrentFile.Content = "Compressing " + src;
pbCurrentFile.Value = percentage;
}
));
};
zipFile.Save(dest);
if(delete)
{
Directory.Delete(src, true);
}
}
});
}
Run Code Online (Sandbox Code Playgroud)
该方法应返回a Task,而不是void.然后await,您可以在完成操作时运行该任务,或者ContinueWith如果您想以旧式方式添加延续,则可以使用该任务.
这种方法也没有实际需要async.你可以只是return结果Task.Run而不是等待它,因为这个方法在调用结束后没有做任何事情.
此外,报告进度的更惯用的方法是,此方法接受IProgress<int>调用者指示如何使用进度更新UI,而不是将UI代码与业务逻辑混合.
| 归档时间: |
|
| 查看次数: |
2666 次 |
| 最近记录: |