簡體   English   中英

如何在C#中使用多個下載線程更新單個UI線程?

[英]How to update the single UI thread with multiple downloading threads in C#?

有人可以幫我用多個下載線程更新單個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;
    });
}

使用Task.WhenAnyStephen Toub的Interleaved

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介紹性帖子很有幫助

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM