Silverlight 4 при доступе к службам данных WCF: разочарование в BeginInvoke - PullRequest
1 голос
/ 04 апреля 2010

Я пытаюсь следовать шаблону для выполнения запросов службы данных WCF с помощью бета-версии Silverlight 4. Вот мой код:

    public CodeTables()
    {
        CodeCountries = new ObservableCollection<dsRealHomes.CodeCountries>();

        dsRealHomes.RealHomesEntities myClient = null;
        myClient = staticGlobals.RealHomesContext();

        object userState = null;


        myClient.BeginExecute<dsRealHomes.CodeCountries>(new Uri("CodeCountries"),
        (IAsyncResult asyncResult) =>
        {
            Dispatcher.BeginInvoke(
                 () =>
                 {
                     var test = myClient.EndExecute<dsRealHomes.CodeCountries>asyncResult).ToList();
                 }
             );
        }, userState);
    }

Это вытекает из ряда примеров, с которыми я сталкивался для служб данных WCF с silverlight. К сожалению, независимо от того, как я пытаюсь реализовать код, я получаю следующую ошибку в Dispatcher.BeginInvoke:

'Ссылка на объект требуется для нестатического поля, метода или свойства (System.Windows.Threading.Dispatcher.BeginInvoke (System.Action)'

1 Ответ

1 голос
/ 04 апреля 2010

Ну, я думаю, что теперь у меня есть ответ. Похоже, что поскольку я создавал экземпляр BeginInvoke из файла класса, а не из файла пользовательского интерфейса (например, страницы), диспетчер пользовательского интерфейса не использовался (если это имеет смысл). Используя отрывок из этой статьи:

http://gen5.info/q/2008/06/25/getting-back-to-the-ui-thread-in-silverlight-2/

Я использовал статический класс UIThread и назначил ему RootVisual.Dispatcher. Теперь в моем коде вместо «Dispatcher.BeginInvoke» я использую «UIThread.Run». И это работает.

...