还有其他的帖子说可以在 Windows Forms 中创建一个控件,然后检查 InvokeRequired
属性,以查看当前线程是否为主线程。
问题是您无法知道该控件本身是否在主线程上创建。
我正在使用以下代码来判断一个线程是否为主线程(启动进程的线程):
if (Thread.CurrentThread.GetApartmentState() != ApartmentState.STA ||
Thread.CurrentThread.ManagedThreadId != 1 ||
Thread.CurrentThread.IsBackground || Thread.CurrentThread.IsThreadPoolThread)
{
// not the main thread
}
有没有人知道更好的方法?看起来这种方式可能容易出错或在将来的运行时版本中变得不兼容。
Current
在线程池线程上将为 null。 - nawfal