Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/271.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何触发显示DownloadFileAsync正在下载哪个文件的事件_C#_Webclient - Fatal编程技术网

C# 如何触发显示DownloadFileAsync正在下载哪个文件的事件

C# 如何触发显示DownloadFileAsync正在下载哪个文件的事件,c#,webclient,C#,Webclient,我有一个从服务器下载文件的URL集合列表 foreach (var category in jsonCollection.Categories) { lblFileName.Text = category.File_name; //Here i want to show a message which file is downloading Thread thread = new Thread(() => { WebClient client = new W

我有一个从服务器下载文件的URL集合列表

foreach (var category in jsonCollection.Categories)
{
    lblFileName.Text = category.File_name; //Here i want to show a message which file is downloading
    Thread thread = new Thread(() => {
        WebClient client = new WebClient();
        client.DownloadProgressChanged += new DownloadProgressChangedEventHandler(client_DownloadProgressChanged);
        client.DownloadFileCompleted += new AsyncCompletedEventHandler(client_DownloadFileCompleted);
        client.DownloadFileAsync(new Uri(category.Url), @"G:\\PROJECT\\BCCP\\file_name");
    });
    thread.Start();
}

我知道DownloadFileCompleted处理程序将在完成下载的每个文件后调用。但我需要一个事件,将在文件下载期间激发,以便我可以显示一条消息哪个文件正在下载。在这里,循环只是完成循环,然后下载FileAsync异步完成其任务

我找到了解决办法。使用await关键字,使函数异步,并使用DownloadFileTaskAsync

private async void functionName()
{
    foreach (var category in jsonCollection.Categories)
    {
        Thread thread = new Thread(() => {
            WebClient client = new WebClient();
            client.DownloadProgressChanged += new DownloadProgressChangedEventHandler(client_DownloadProgressChanged);
            client.DownloadFileCompleted += new AsyncCompletedEventHandler(client_DownloadFileCompleted);
            await client.DownloadFileTaskAsync(new Uri(category.Url), @"G:\\PROJECT\\BCCP\\file_name");
            //await for downloading
            lblFileName.Text = category.File_name;
        });
        thread.Start();
    }
}

使用wait关键字。等待运算符应用于异步方法中的任务,以在方法的执行中插入挂起点,直到等待的任务完成

await client.DownloadFileTaskAsync(new Uri("download_url"), "location_url_where_do_you_want_to_download");
//Do anything what do you want...

必须在函数名之前添加async关键字。

为什么
DownloadProgressChanged
不能解决您的问题。@ErikPhilips谢谢您的评论。我没有想到这一点。我是新来的。那么哪一个更好呢?