0

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