0

我有一个应用程序,它加载指向要使用 winforms 下载的图片的 HTTP URL 列表。异步下载的图片放在imagelist里面。我已经完成了,但我的方法一次只下载一张图片,一直持续到每张图片都下载完毕。有没有办法让 webrequest 并行下载多个项目以加快进程?即使带宽被划分,与应用程序一次只下载一张图片相比,它仍然应该更快。VB 或 C# 编码就可以了。非常感谢。

4

1 回答 1

-1

试试这个方法

https://github.com/dodyg/hobi-hobi/blob/master/HobiHobi.Core/Syndications/SyndicationFetcher.cs

  public List<FeedAndSource> DownloadAll(RssSubscription subscription)
    {
        var feeds = var feeds = new SynchronizedCollection<FeedAndSource>();

        var tasks = new List<Task>();

        foreach (var sub in subscription.Items)
        {
            var r = Task.Factory.StartNew(() =>
                {
                    var res = Fetch(sub.XmlUri);
                    if (res.IsFound)
                        feeds.Add(new FeedAndSource(sub, res.Item));
                });

            tasks.Add(r);
        }

        Task.WaitAll(tasks.ToArray());

        return feeds.toList();
    }

您只需要关心Task.Factory.StartNew 和Task.WaitAll。

您可以在以下位置找到它们

使用 System.Threading;使用 System.Threading.Tasks;

正如评论指出的那样, List 不是线程安全的。改用 SynchronizedCollection http://msdn.microsoft.com/en-us/library/ms668265.aspx

于 2013-01-27T15:06:45.970 回答