Допустим, у нас есть сервис TestService
с методом DoWork
. На клиенте он сгенерирует методы DoWorkCompleted
и DoWorkAsync
.
Это мое наблюдение, если вы вызываете DoWorkAsync
из потока пользовательского интерфейса, DoWorkCompleted
будет выполняться в потоке пользовательского интерфейса, как и ожидалось.
Но если я запускаю BackgroundWorker
и вызываю службу DoWorkAsync
из нее, тогда DoWorkCompleted
выполняется в новом потоке, отличном от потока вызывающего. Пример:
- Запустить
BackgroundWorker
экземпляр <-
Из пользовательского интерфейса </li>
- Рабочий
DoWork
метод выполняется
<- Тема 2 </li>
- Позвонить в сервис
DoWorkAsync
от
рабочий DoWork
<- из потока 2 </li>
- Служба запускается и
DoWorkCompleted
исполняется <- Тема 3 </li>
- рабочий
DoWorkCompleted
получает
выполнено <- поток пользовательского интерфейса </li>
Как клиент службы узнает, когда начинать новую тему и когда отправлять ее обратно в ветку вызывающей стороны?