winforms を使用してダウンロードする写真を指す HTTP URL のリストをロードするアプリがあります。非同期にダウンロードされた画像は、イメージリスト内に配置されます。私はすでにそれを行っていますが、私の方法では一度に 1 つの画像のみをダウンロードし、すべての画像がダウンロードされるまで続行します。プロセスを高速化するために、webrequest が複数のアイテムを並行してダウンロードするようにする方法はありますか? 帯域幅が分割されていても、アプリが一度に 1 枚の写真しかダウンロードしない場合に比べて、それでも高速になるはずです。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 に答える