Como detectar se estamos em um thread de interface do usuário?

Por uma questão de argumento, considere um thread de interface do usuário como um thread que teve uma chamada paraApplication.Run() ou uma de suas sobrecargas é chamada e tem um loop de mensagem ativo em execução.

Existe uma maneira de detectar se estamos atualmente executando em tal thread?

A razão pela qual eu quero isso é porque eu tenho uma classe com uma função privada que é de longa duração. A classe em si já é multithread e o uso dessa classe é tal que ela pode ser usada a partir da interface do usuário ou de threads em segundo plano que estão sendo processadas. Essa função também cai nessa rede. Mas não quero bloquear o thread da interface do usuário. Então eu quero detectar se estou rodando em um thread de interface do usuário e se assim for, bifurque a chamada de função em um thread de fundo (provavelmenteThreadPool, mas isso não é um problema para esta discussão). Isso é totalmente bem-comportado, mas os threads em segundo plano provavelmente dependem da saída da função, portanto, o bloqueio para eles é melhor, enquanto o thread da UI está acessando-o de uma maneira mais "set-and-forget".

questionAnswers(4)

yourAnswerToTheQuestion