C#如何使用FileStream从Task <byte []>列表异步保存多个图像 WinForms

问题描述

我正在尝试在WinForms中制作一个简单的Webscraper,该Webscraper可以下载图像,然后将其保存在给定的网站上。我一直在各处寻找清楚发生的事情,并且几天来一直试图自己解决这个问题。感觉可能有一个简单的解决方法,我只是无法扩大自己的大脑来看到它。

现在,我的程序仅保存第一个字节[],因此会保留下载的第一个图片。它在整个循环中都这样做。为什么不占用下一个任务的下一个字节[]?

我这里真是个菜鸟,可能会缺少一些重要的东西,感谢您的帮助! 这是该方法代码

            private async Task SaveImagesAsync()
        {
            HttpClient client = new HttpClient();
            List<Task<byte[]>> tasks = new List<Task<byte[]>>();
            FolderbrowserDialog folderbrowserDialog = new FolderbrowserDialog();
            DialogResult result = new DialogResult();
            folderbrowserDialog.ShowDialog();

            if (result == DialogResult.OK)
            {
                
                List<string> urlCollection = new List<string>();
                foreach (var item in textBoxImageURL.Lines)
                {
                    if (!(item == ""))
                    {
                        tasks.Add(Task.Run(() => client.GetByteArrayAsync(item)));
                        urlCollection.Add(item);
                    }
                    else
                    {
                        continue;
                    }
                }

                var downloadedImages = await Task.WhenAny(tasks);
                foreach (var url in urlCollection)
                {
                    string filename = "Image" + GetFileExtension(url);
                    string path = Path.Combine(folderbrowserDialog.Selectedpath,filename);
                    FileStream fs = new FileStream(NextAvailableFilename(path),FileMode.Create);
                    await fs.WriteAsync(downloadedImages.Result,downloadedImages.Result.Length);                
                }

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)