1

谁能帮我在任务之间传递变量?

我遇到了关于 Dispatcher.RunAsync() 的麻烦。我将变量 RssItem 声明为 RSSItem 的类型。我正在尝试将 Dispatcher.RunAsync(...) 中的 await m_RSSReader.CreateRSSItem() 返回的 RssItem 的值传递到外部以分配 m_RssItemList.Add(RssItem);。

RSSItem RssItem;
// Save Individual RSS items as RSSItem
foreach (SyndicationItem item in CurrentFeed.Items)
{
    //RssItem = new RSSItem();
    // by using dispatcher, it resolves the issue of lagging UI
    await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, async () =>
        {
            RssItem = await m_RSSReader.CreateRSSItem(item.Links[0].Uri, m_CurrentRSSDataGroup, item, CurrentFeed);
        });

        if (RssItem != null)
        {
            Debug.WriteLine("RssItem Title : {0}", RssItem.Title);
            m_RssItemList.Add(RssItem);
        }
}

[7/11/12] RSSItem 是我为存储创建的一个类。我使用 Dispatcher.RunAsync() 来避免 UI 中断,方法 m_RSSReader.CreateRSSItem() 将返回我想要的类 (RSSItem RssItem)。但我需要将它传递到 Dispatcher 任务之外并将 RssItem 添加到列表 (m_RssItemList.Add(RssItem)。但我无法将 RssItem 传递到 Dispatcher 之外。

谢谢,

4

2 回答 2

3

我不知道您是否Task.Run改用它来解决它,但是如果您确实想等待 a dispatcher.RunAsync,您也可以使用 a WaitHandle,例如 a ManualResetEvent。出于某种原因,RunAsync呼叫继续进行而实际上没有“等待”。等待句柄负责处理。

// assign to null, since it will be "unassigned" otherwise
RssItem rssItem = null;
EventWaitHandle waithandle = new ManualResetEvent(false);
await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, async () =>
{
    rssItem = await m_RSSReader.CreateRSSItem(item.Links[0].Uri, m_CurrentRSSDataGroup, item, CurrentFeed);
    waithandle.Set();
});

waithandle.WaitOne();
if (rssItem != null)
{
    Debug.WriteLine("RssItem Title : {0}", rssItem.Title);
    m_RssItemList.Add(rssItem);
}
于 2013-03-22T15:03:46.610 回答
1

我不认为Dispatcher.RunAsync你认为它会做。

我相信你正在寻找的是Task.Run,像这样的东西:

RssItem = await Task.Run(() =>
   m_RSSReader.CreateRSSItem(item.Links[0].Uri, m_CurrentRSSDataGroup, item, CurrentFeed)
);
于 2012-07-11T11:38:17.023 回答