gpt4 book ai didi

c# - 如何使用 Async/Await 进行进度报告

转载 作者:IT王子 更新时间:2023-10-29 04:24:26 25 4
gpt4 key购买 nike

假设我有一个文件列表,我必须使用 c# 项目中的 ftp 相关类将这些文件复制到 Web 服务器。在这里我想使用 Async/Await 功能,还想显示多个进度条以同时上传多个文件。每个进度条指示每个文件的上传状态。所以请指导我该怎么做。

当我们与后台 worker 一起做这种工作时,这很容易,因为后台 worker 有进度变化事件。那么如何使用 Async/Await 处理这种情况。如果可能的话,用示例代码指导我。谢谢

最佳答案

来自 article 的示例代码

public async Task<int> UploadPicturesAsync(List<Image> imageList, 
IProgress<int> progress)
{
int totalCount = imageList.Count;
int processCount = await Task.Run<int>(() =>
{
int tempCount = 0;
foreach (var image in imageList)
{
//await the processing and uploading logic here
int processed = await UploadAndProcessAsync(image);
if (progress != null)
{
progress.Report((tempCount * 100 / totalCount));
}
tempCount++;
}
return tempCount;
});
return processCount;
}

private async void Start_Button_Click(object sender, RoutedEventArgs e)
{
int uploads=await UploadPicturesAsync(GenerateTestImages(),
new Progress<int>(percent => progressBar1.Value = percent));
}

如果您想独立报告每个文件,您将有不同的 IProgress 基本类型:

public Task UploadPicturesAsync(List<Image> imageList, 
IProgress<int[]> progress)
{
int totalCount = imageList.Count;
var progressCount = Enumerable.Repeat(0, totalCount).ToArray();
return Task.WhenAll( imageList.map( (image, index) =>
UploadAndProcessAsync(image, (percent) => {
progressCount[index] = percent;
progress?.Report(progressCount);
});
));
}

private async void Start_Button_Click(object sender, RoutedEventArgs e)
{
int uploads=await UploadPicturesAsync(GenerateTestImages(),
new Progress<int[]>(percents => ... do something ...));
}

关于c# - 如何使用 Async/Await 进行进度报告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19980112/

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