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