为了论证的缘故,可以将UI线程视为一个已调用Application.Run()
或调用它的重载之一的线程,并且具有正在运行的活动消息循环。如何检测我们是否在UI线程上?
有没有一种方法来检测我们目前是否正在执行这样的线程?
我想要这个的原因是因为我有一个具有长时间运行的私有函数的类。这个类本身已经是多线程的,并且这个类的用法是这样的,它可以从UI或后台线程进行处理。这个功能也落入这个网络。但我不希望它阻塞UI线程。所以我想检测一下是否在UI线程上运行,如果是这样,请将函数调用分支到后台线程(可能ThreadPool
,但这对本次讨论来说不是问题)。这是完全良好的行为,但后台线程可能依赖于函数的输出,所以阻塞它们会更好,而UI线程以更“一劳永逸”的方式访问它。
startupthread不一定是GUI线程或唯一的GUI线程。 – 2009-07-19 08:04:00
错误:InvokeRequired返回true,如果在“与创建控件的线程不同的线程上” – 2012-11-01 11:38:38