Насколько я понимаю, у вас есть такой поток:
- Выполнить некоторые подготовительные работы (поток пользовательского интерфейса)
- Выполнить некоторую фоновую работу (другой поток)
- Выполнить некоторые отделочные работы (поток пользовательского интерфейса)
Вы хотите дождаться окончания второго маркера, прежде чем запускать код в третьем.
Самый простой способ сделать это - вызвать код второй пули обратно в поток пользовательского интерфейса (обычным способом), чтобы запустить третью пулю. Если вы действительно, действительно хотите использовать локальные переменные из метода, вы всегда можете использовать анонимный метод или лямбда-выражение для создания делегата для передачи фоновому работнику - но обычно было бы чище просто иметь метод "PostBackgroundWork" или что-то в этом роде.
РЕДАКТИРОВАТЬ: Это не было бы хорошо для свойства, как вы показали в отредактированном вопросе, но я бы реорганизовал это как запрос на получение дочерних элементов с обратным вызовом, когда он будет завершен. Это позволяет избежать всего беспорядка повторного входа и прояснить, что на самом деле происходит.