我了解当从UI线程以外的线程访问控件时,多线程WinForms应用程序需要使用Control.Invoke
或Control.BeginInvoke
。
但是,当操纵控件中包含但不是从Control
基类派生的对象时,此规则是否也适用?
例如,使用WebBrowser
控件时,可以在不使用Control.Invoke
的情况下操作DOM吗?
谢谢, 添
答案 0 :(得分:0)
这适用于从Control
继承的所有内容。
顺便说一下:你可以尝试一下。当你非法访问这些方法时,它通常会在调试模式下自动抛出。
答案 1 :(得分:0)
答案肯定是否定的。原因是因为你真的不知道Control
何时以及如何使用所包含的对象,你当然无法在Control
内注入必要的同步机制。例如,如果Control
需要在从工作线程操作它的同时从WM_PAINT消息中访问对象,会发生什么?你可以把必要的锁放在你的身边,但你几乎没有办法让Control
的内部管道做同样的事情。