Как определить, находимся ли мы в потоке пользовательского интерфейса?

Ради аргумента, рассмотрим поток пользовательского интерфейса как поток, который имел вызовApplication.Run() или одна из его перегрузок вызвана и активен активный цикл обработки сообщений.

Есть ли способ определить, выполняем ли мы в настоящее время такой поток?

Причина, по которой я этого хочу, заключается в том, что у меня есть класс с закрытой функцией, которая работает долго. Сам класс уже многопоточный, и использование этого класса таково, что его можно использовать либо из пользовательского интерфейса, либо из фоновых потоков, выполняющих обработку. Эта функция также попадает в эту сеть. Но я не хочу, чтобы он блокировал поток пользовательского интерфейса. Поэтому я хочу определить, запущен ли я в потоке пользовательского интерфейса и, если это так, раскошелиться на вызов функции в фоновом потоке (возможно,ThreadPool, но это не является проблемой для этого обсуждения). Это вполне корректно, но фоновые потоки, вероятно, полагаются на выходные данные функции, поэтому блокирование для них лучше, тогда как поток пользовательского интерфейса обращается к нему в более «установленном и забываемом» состоянии. манера.

Ответы на вопрос(4)

Ваш ответ на вопрос