c# - 如何将Dispatcher或Task的值传递给外部?

标签 c# asynchronous task dispatcher async-await

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

关于 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 之外。

谢谢,

最佳答案

我不知道您是否使用 Task.Run 解决了它,但是如果您确实想要等待 dispatcher.RunAsync,您还可以使用 WaitHandle,例如 ManualResetEvent。出于某种原因,RunAsync 调用会继续进行,但实际上并未“等待”。 waithandle 会处理这个问题。

// 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);
}

关于c# - 如何将Dispatcher或Task的值传递给外部?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11427999/

相关文章:

c# - 缩小图像尺寸 imagemagick

c# - 如何重新启动单个实例 winforms 应用程序

android - 从 Android 应用程序安装程序和主屏幕启动应用程序时的 Activity 堆栈排序问题

c# - 使用 Parallel 创建绑定(bind)项时 CollectionViewSource.SortDescriptions 不起作用

Gradle:具有可变输入的任务

c# - 从命令行为 C# 程序使用 App.Config

c# - NServiceBus 处理程序抛出元数据错误

javascript - AngularJS - 如何在使用 $resources 时保留 UI 状态

rest - Swagger/RAML(或任何类似的 REST API 规范)是否支持 REST 异步客户端回调?

c++ - 为阻塞调用构造信号/槽包装器的正确方法是什么?