Асинхронный обратный вызов Silverlight WCF - PullRequest
0 голосов
/ 26 марта 2010

Я создал свой собственный сервис WCF и смог успешно общаться с ним через мой клиент Silverlight. Я столкнулся с интересной проблемой моих асинхронных обратных вызовов. Когда вызывается мой обратный вызов, я не могу обновить какие-либо элементы управления пользовательского интерфейса с ужасным недопустимым кросс-поточным доступом

Вот как выглядит моя функция обратного вызова

    private void GetTimeCallBack( object sender, Talk.ClientBase<IService>.ClientEventArgs e )
    {
        lblDisplay.Text = e.Object.ToString();
    }

Быстрый поиск в Google показал, что я должен сделать это вместо этого.

private void GetTimeCallBack( object sender, Talk.ClientBase<IService>.ClientEventArgs e )
    {
        Dispatcher.BeginInvoke( () => lblDisplay.Text = e.Object.ToString() );
    }

Теперь все работает нормально, но я не ожидал, что мой обратный вызов будет запущен в другом потоке. Мне всегда нужно будет использовать класс Dispatcher для того, чтобы что-то изменить в моем классе, или это просто ограничено элементами пользовательского интерфейса? Я совсем не знаком с классом Dispatcher, поэтому я хочу понять его подробнее.

1 Ответ

1 голос
/ 26 марта 2010

да .. За дополнительной информацией обращайтесь по ссылке . Я добавил ответ Джоэля на вопрос ниже

В Silverlight 2 Beta 2 был значительное изменение в параллелизме модель используется для асинхронного коммуникации. В бета-версии 1 эти типы запросов, возвращаемых в потоке пользовательского интерфейса. В бета-версии 2, когда вы решите использовать BeginGetResponse веб-запроса вас говорят Silverlight использовать рабочий поток, который приходит из потока бассейн. В результате вы не можете обновить любые элементы пользовательского интерфейса в пользовательском интерфейсе нить. Использование Dispatcher.BeginInvoke это способ получить метод отстрела на UIThread из этого потока THEAD. Любое взаимодействие с UIelements из асинхронного обратного вызова создаст исключение перекрестной нити.

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