Исключение при использовании ExecuteQuery () в клиентской объектной модели Silverlight - PullRequest
0 голосов
/ 15 апреля 2011

Я разрабатывал пользовательский элемент управления Silverlight для SharePoint с использованием модели клиентских объектов.Вот кодирование

            InitializeComponent();
            ctx = ClientContext.Current;
            Web web = ctx.Web;
            ctx.Load(web, oweb => oweb.Title);
            ctx.Load(web, oweb => oweb.Lists);
            ctx.ExecuteQuery();

Я слышал, что SIlverlight поддерживает методы ExecuteQuery () и ExecuteQueryAsync ().Но я получаю сообщение об исключении, подобное этому: «вызываемый метод или свойство может блокировать поток пользовательского интерфейса, и это запрещено. Используйте фоновый поток для вызова метода или свойства, например, с помощью System.Threading.ThreadPool.QueueUserWorkItem метод для вызова метода или свойства. "

Может кто-нибудь сказать мне, где я иду не так и как использовать метод ExecuteQuery () ??Спасибо.

1 Ответ

0 голосов
/ 19 апреля 2011

Я мог бы быть неосновным здесь, но, насколько я понимаю, ExecuteQuery () требует от вас создания потока, чтобы вы не вызывали остановку потока пользовательского интерфейса при вызове метода.Причина, по которой вы используете ExecuteQueryAsync, заключается в следующем: ExecuteQueryAsync выполняет операцию в отдельном потоке, а затем просто перезванивает в поток пользовательского интерфейса с помощью диспетчера:

ctx.ExecuteQueryAsync(onQuerySucceeded, onQueryFailed);

...

 private void onQuerySucceeded(object sender, ClientRequestSucceededEventArgs args)
 {
 this.Dispatcher.BeginInvoke((Action)(() =>
            {
doStuff();
}));
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...