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