Применяется ли правило WinForms Control.Invoke к содержащимся объектам? - PullRequest
1 голос
/ 22 октября 2010

Я понимаю, что многопоточные приложения WinForms должны использовать Control.Invoke или Control.BeginInvoke при доступе к элементу управления из потока, отличного от потока пользовательского интерфейса.

Но применяется ли это правило также при манипулировании объектами, содержащимися в элементе управления, но не являющимися производными от базового класса Control?

Например, при использовании элемента управления WebBrowser можно ли манипулировать DOM без использования Control.Invoke?

Спасибо, Тим

Ответы [ 2 ]

0 голосов
/ 22 октября 2010

Ответ, безусловно, нет.Причина в том, что вы действительно не представляете, когда и как Control будет использовать содержащийся объект, и вы, конечно, не сможете внедрить необходимые механизмы синхронизации внутри Control.Например, что произойдет, если Control потребуется доступ к объекту из сообщения WM_PAINT в то же время, когда вы манипулируете им из рабочего потока?Вы можете поставить необходимые замки на свою сторону, но вы почти ничего не можете сделать, чтобы внутренний сантехник Control сделал то же самое.

0 голосов
/ 22 октября 2010

Это относится ко всему, что наследуется от Control.

Кстати: вы можете просто попробовать это. Обычно он автоматически выбрасывает в режиме отладки, когда вы обращаетесь к методам незаконно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...