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