В каком потоке выполняется обратный вызов при выполнении асинхронного вызова служб RIA? - PullRequest
5 голосов
/ 10 октября 2011

Я использую DomainContext RIA Services в приложении Silverlight 4 для загрузки данных. Если я использую контекст из потока пользовательского интерфейса, всегда ли обратный вызов будет в потоке пользовательского интерфейса?

Или, другими словами, всегда ли обратный вызов находится в том же потоке, что и вызов?

Пример кода ниже, иллюстрирующий сценарий ...

    private void LoadStuff()
    {
        MyDomainContext context = new MyDomainContext ();
        context.Load(context.GetStuffQuery(), op =>
        {
            if (!op.HasError)
            {
                // Use data.

                // Which thread am I on?
            }
            else
            {
                op.MarkErrorAsHandled();

                // Do error handling

            }
        }, null
        );
    }

1 Ответ

3 голосов
/ 10 октября 2011

Если вы выполняете метод загрузки DomainContext в потоке пользовательского интерфейса, то обратный вызов также выполняется в потоке пользовательского интерфейса.

Это также верно, если вы используете завершенное событиеLoadOperation возвращается Load.

LoadOperation<Stuff> operation = context.Load(context.GetStuffQuery());
operation.Completed += (o, e) {
  if (!operation.HasError) {
    // Use data.

    // Which thread am I on?
  }
  else {
    op.MarkErrorAsHandled();
    // Do error handling
  }
};
...