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