Следует ли мне использовать Invoke или SynchronizationContext для обновления элементов управления формы из другого потока?

Пытаюсь осмыслить обновление элементов управления пользовательского интерфейса из других потоков.

В настоящее время используется BeginInvoke, и, честно говоря, он работает нормально, но я все время слышу о том, как вы можете использовать SynchronizationContext, чтобы сделать то же самое.

Что предпочтительнее?

Кроме того, не является ли обновление пользовательского интерфейса из потока плохой практикой? Было бы лучше создать событие и позволить основной форме обработать его вместо этого, или есть другие предпочтительные способы сделать это?

Извините за несколько субъективный вопрос, но в мире потоковой передачи так много вариантов, и я Я пытаюсь понять их различия и то, где каждое из них применимо, а также передовой опыт написания читаемого и расширяемого кода на будущее.

Edit: Также теперь я вижу, что есть маршрут TaskScheduler.FromCurrentSynchronizationContext .. Так много вариантов x_x

5
задан John Smith 20 September 2011 в 05:01
поделиться