为了论证的目的,将 UI 线程视为已调用Application.Run()
或调用其中一个重载并运行活动消息循环的线程。
有没有办法检测我们当前是否在这样的线程上执行?
我想要这个的原因是因为我有一个具有长期运行的私有函数的类。该类本身已经是多线程的,并且此类的使用使得它可以从 UI 或后台线程进行处理时使用。这个功能也落入了这个网。但我不希望它阻塞 UI 线程。所以我想检测我是否在 UI 线程上运行,如果是,则将函数调用分叉到后台线程中(可能ThreadPool
,但这不是本次讨论的问题)。这完全是行为良好的,但后台线程可能依赖于函数的输出,因此对它们来说阻塞更好,而 UI 线程以更“一劳永逸”的方式访问它。