如何以编程方式找到Control的拥有线程

时间:2012-02-13 18:41:50

标签: vb.net visual-studio user-controls invoke owner

要求所有.net控件都是在主线程上创建的,至少如果目的是将控件与通常情况下的接口集成,则必须这样做。另外,要修改控件的属性,必须使用自己的调用方法从控件的线程调用该方法。

有没有办法直接查看控件并识别其拥有的线程?

另外或相反,是否可以检测当前线程是否是“主线程”? Visual Studio标识的线程是否有任何特殊之处可以在运行时看到,或者只是这是VS执行初始化调试的第一个线程?

1 个答案:

答案 0 :(得分:5)

  

另外或相反,是否可以检测当前线程是否是“主线程”?

您可以使用Control.InvokeRequired查看您是否在适当的主题上。如果不是,那么您应该使用Control.InvokeControl.BeginInvoke将回调封送回拥有的主题。

  

Visual Studio标识的线程是否有任何特殊之处可以在运行时看到,或者只是这是VS执行初始化调试的第一个线程?

它实际上是用于创建处理Windows消息泵的SynchronizationContext的线程。此线程将(或应该)始终标记为STA线程(请参阅Thread.ApartmentState),并使相应的同步上下文和消息泵运行。 Application.Run方法在普通Windows窗体应用程序的主线程中设置它。