ShareCon's clientContext.ExecuteQueryAsync () не возвращается - PullRequest
0 голосов
/ 08 ноября 2011

Вот код, который я использую для получения текущего имени пользователя из SharePoint 2010 через Silverlight:

ClientContext clientContext = ClientContext.Current;
if (clientContext == null)
{
    SharepointUser = "[Unknown]";
}
else
{
    MessageBox.Show("Beginning server query now...");
    clientContext.Load(clientContext.Web, s => s.CurrentUser);
    clientContext.ExecuteQueryAsync((s, e) =>
    {
        MessageBox.Show("RESPONSE!");
        SharepointUser = clientContext.Web.CurrentUser.LoginName;
        MessageBox.Show("Hello, " + SharepointUser + "!");
    },
    (s, e) =>
    {
        MessageBox.Show("An error occurred: " + e.ToString());
    });
}

Проблема в том, что запрос никогда не возвращается! События успеха / ошибки вообще не срабатывают, и кажется, что запрос просто уходит в пустоту.

У кого-нибудь есть идеи?

Ответы [ 2 ]

1 голос
/ 31 мая 2012

MessageBox.Show, вероятно, является причиной проблемы. У меня возникла та же проблема, и при отладке я обнаружил, что вызовы MessageBox.Show внутри обратных вызовов ExecuteQueryAsync вызывали исключение «Недопустимый межпоточный доступ». Мне нужно было обернуть вызовы так, чтобы это заработало:

Deployment.Current.Dispatcher.BeginInvoke(() => MessageBox.Show("Request Suceeded"));
0 голосов
/ 08 ноября 2011

Попробуйте это: -

ClientContext clientContext = ClientContext.Current;
if (clientContext == null)
{
    SharepointUser = "[Unknown]";
}
else
{
            try
            {
    MessageBox.Show("Beginning server query now...");
    clientContext.Load(clientContext.Web, s => s.CurrentUser);
    clientContext.ExecuteQueryAsync((s, e) =>
    {
        MessageBox.Show("RESPONSE!");
        SharepointUser = clientContext.Web.CurrentUser.LoginName;
        MessageBox.Show("Hello, " + SharepointUser + "!");
    },
    (s, e) =>
    {
        MessageBox.Show("An error occurred: " + e.ToString());
    });
            }
            catch (Exception err)
            {
                 MessageBox.Show("Synchronous error occurred: " + err.ToString());
            }
}

Если попытка запустить асинхронную операцию не удалась, обычно выдает ошибку синхронно, а не оставляет ее для асинхронного обратного вызова.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...