要求所有.net控件都是在主线程上创建的,至少如果目的是将控件与通常情况下的接口集成,则必须这样做。另外,要修改控件的属性,必须使用自己的调用方法从控件的线程调用该方法。
有没有办法直接查看控件并识别其拥有的线程?
另外或相反,是否可以检测当前线程是否是“主线程”? Visual Studio标识的线程是否有任何特殊之处可以在运行时看到,或者只是这是VS执行初始化调试的第一个线程?
答案 0 :(得分:5)
另外或相反,是否可以检测当前线程是否是“主线程”?
您可以使用Control.InvokeRequired查看您是否在适当的主题上。如果不是,那么您应该使用Control.Invoke或Control.BeginInvoke将回调封送回拥有的主题。
Visual Studio标识的线程是否有任何特殊之处可以在运行时看到,或者只是这是VS执行初始化调试的第一个线程?
它实际上是用于创建处理Windows消息泵的SynchronizationContext的线程。此线程将(或应该)始终标记为STA线程(请参阅Thread.ApartmentState),并使相应的同步上下文和消息泵运行。 Application.Run
方法在普通Windows窗体应用程序的主线程中设置它。