【问题标题】:Silverlight RIA Services with Synchronous request具有同步请求的 Silverlight RIA 服务
【发布时间】:2011-07-15 21:32:33
【问题描述】:

我正在使用带有 Silverlight 的 RIA 服务,并使用以下代码在 DataItemCollection 中加载集合。

我的问题是 LoadOperation 运行它返回 0 行,然后在一段时间后,它再次获得调试器中的控制权,然后运行 ​​for 循环,然后给出正确的计数。

因此,它似乎是异步的。如何同步获取它,以便在返回数据时给我正确的计数?

ReportingCategoryContentAssociationContext _ReportingCategoryContentAssociationContext = new ReportingCategoryContentAssociationContext();

DataItemCollection lstdt = new DataItemCollection();

            LoadOperation loadopt = _ReportingCategoryContentAssociationContext.Load(_ReportingCategoryContentAssociationContext.GetReportingContentScoreByCategoryQuery());

loadopt.Completed += (s, args) =>
            {
                if (!loadopt.HasError)
                {

                    DataItem dtitem = null;
                    foreach (GetReportingCategoriesContentScore_Result Lkt in ((LoadOperation<GetReportingCategoriesContentScore_Result>)s).Entities)
                    {
                        dtitem = new DataItem();
                        dtitem.ReportingCategoryID = Lkt.CategoryID;
                        dtitem.ParentCategoryID = Lkt.ParentCategoryID;
                        dtitem.CategoryTitle = Lkt.CategoryTitle;
                        lstdt.Add(dtitem);
                    }
                }
            };

【问题讨论】:

  • HiTech Magic 的回答是正确的。由于它是异步的,您是否遇到任何问题?

标签: silverlight wcf-ria-services synchronous


【解决方案1】:

Silverlight 中的所有 RIA 服务调用都是异步的。

您的loadopt.Completed += (s, args) =&gt; 代码只是一个匿名异步回调。单步调试负载会让您误以为代码是按顺序发生的。

您只能对完成事件回调中的数据进行操作。

【讨论】:

  • 能否给我一个在完成事件回调中操作数据的例子或者给我一个解释概念的URL?
  • 如果您尝试使用回调函数,它可能对您更有意义。重新输入您的 loadopt.Completed += 并在 = 之后按两次 tab 以创建新的回调方法。匿名方法会使代码看起来比实际更复杂。
猜你喜欢
  • 2014-08-06
  • 1970-01-01
  • 1970-01-01
  • 2011-02-05
  • 1970-01-01
  • 2011-03-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多