WinForms Control.Invoke规则是否适用于包含的对象?

时间:2010-10-22 12:15:27

标签: c# winforms multithreading

我了解当从UI线程以外的线程访问控件时,多线程WinForms应用程序需要使用Control.InvokeControl.BeginInvoke

但是,当操纵控件中包含但不是从Control基类派生的对象时,此规则是否也适用?

例如,使用WebBrowser控件时,可以在不使用Control.Invoke的情况下操作DOM吗?

谢谢, 添

2 个答案:

答案 0 :(得分:0)

这适用于从Control继承的所有内容。

顺便说一下:你可以尝试一下。当你非法访问这些方法时,它通常会在调试模式下自动抛出。

答案 1 :(得分:0)

答案肯定是否定的。原因是因为你真的不知道Control何时以及如何使用所包含的对象,你当然无法在Control内注入必要的同步机制。例如,如果Control需要在从工作线程操作它的同时从WM_PAINT消息中访问对象,会发生什么?你可以把必要的锁放在你的身边,但你几乎没有办法让Control的内部管道做同样的事情。