0

誰かが私が複数のダウンロードスレッドで単一のUIスレッドを更新するのを手伝ってもらえますか?WinRTを使用したC#で。

現在、Task.Runを使用しています。動作しますが、複数のスレッドの処理に広がるため、プログラムは単一のUIを適切に更新できませんでした。

メソッドUpdateRSSItemAsync()は、UI(ListView)にバインドされているコンテンツをダウンロードします(RSSItemListを更新します)。

ありがとうございました、

プログラムは順番に正常に実行されます

// Run multiple tasks in sequential order
foreach (SyndicationItem item in CurrentFeed.Items)
{
    if (m_bDownloadInterrupted)
        break;

    RssItemList = await UpdateRSSItemAsync(CurrentRSSDataGroup, RssItemList, CurrentFeed, item);

}

ただし、複数のスレッドで実行している場合、UIの更新に失敗しました

// Run multiple tasks in multiple threads
foreach (SyndicationItem item in CurrentFeed.Items)
{
    if (m_bDownloadInterrupted)
        break;

    RssItemList = await Task.Run<List<RSSItem>>(async () =>
    {
        RssItemList = await UpdateRSSItemAsync(CurrentRSSDataGroup, RssItemList, CurrentFeed, item);
        return RssItemList;
    });
}
4

1 に答える 1

1

Task.WhenAnyまたはStephenToubInterleaved

var tasks = CurrentFeed.Items.Select(item => UpdateRSSItemAsync(CurrentRSSDataGroup, RssItemList, CurrentFeed, item)).ToList();
while (tasks.Count != 0)
{
  var completedTask = await Task.WhenAny(tasks);
  tasks.Remove(completedTask);
  ProcessRssItem(await completedTask);
}

私のasync/awaitイントロの投稿が役立つかもしれません。

于 2012-09-26T02:36:48.700 に答える