Зачем беспокоиться с InvokeRequired - PullRequest
1 голос
/ 01 сентября 2011

Я понимаю необходимость использования Invoke / BeginInvoke для выполнения вызовов из рабочих потоков в функции или процедуры, которые вносят изменения в компоненты, принадлежащие потоку пользовательского интерфейса ...

У меня вопрос: есть ли веская причина беспокоиться о проверке InvokeRequired? Скажем, обработчик событий может вызываться либо из рабочего потока, либо из потока пользовательского интерфейса в различных обстоятельствах. Есть ли какие-либо последствия в том, что поток пользовательского интерфейса вызывает Invoke для метода, который он сам в итоге выполнит?

Say ...

Private Sub SomeProcedure() Handles event1, event2, event3
  Me.Invoke(New delegateSomeProc(Address of SomeProc))
EndSub

Теперь, скажем, событие1 запускается из потока пользовательского интерфейса, но события 2 и / или 3 запускаются из какого-то другого потока ... есть ли какая-либо опасность для вызова события1, так или иначе, вызывая invoke, даже если это не обязательно? Это немного неэффективно?

Ответы [ 2 ]

2 голосов
/ 01 сентября 2011

Есть ли какие-либо последствия в том, что поток UI вызывает Invoke для метода, который он сам в конечном итоге выполнит?

Единственное, что я знаю о том, что использование Invokeпотерпит неудачу, если вызывается до того, как будет создан дескриптор элемента управления.

В этой статье обсуждаются проблемы более подробно.

2 голосов
/ 01 сентября 2011

Есть ли какие-либо последствия для вызова потоком пользовательского интерфейса Invoke для метода, который он сам в конечном итоге выполнит?

Нет, нет никаких последствий, кроме, вероятно, производительности, как будтоникакой вызов не требуется, прямой вызов метода будет быстрее, чем прохождение через инфраструктуру Invoke.

...