Службы RIA Silverlight с синхронным запросом - PullRequest
0 голосов
/ 15 июля 2011

Я использую RIA Services с Silverlight и использую следующий код для загрузки коллекции в 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);
                    }
                }
            };

1 Ответ

3 голосов
/ 15 июля 2011

Все вызовы RIA Services в Silverlight являются асинхронными.

Ваш код loadopt.Completed += (s, args) => является просто анонимным асинхронным обратным вызовом. Одношаговая отладка загрузки вводит вас в заблуждение, что код выполняется последовательно.

Вы можете работать только с данными в завершенном обратном вызове события.

...