Por que Thread.Join () trava mesmo que os métodos no thread tenham retornad

Eu tenho um aplicativo WPF que usa algum código de biblioteca para autenticação que precisa ser executado em um thread de apartamento de thread único. Minha abordagem é gerar um thread separado para obter o objeto de autenticação, bloquear até o retorno do thread e continuar a execução. No entanto, emalgun instâncias meu aplicativo trava em Thread.Join (), mesmo que o método thread tenha retornad

    public static ClaimsAuthenticationResult GetClientContextAndCookieCollection(string siteUrl, out CookieCollection cookieResult)
    {
        ClaimsAuthenticationResult authResult = new ClaimsAuthenticationResult();

        // Authentication module needs to run in single-thread apartment state because it uses
        // COM library calls where this is required
        Thread authenticationThread = new Thread(new ThreadStart(threadMethod));
        authenticationThread.SetApartmentState(ApartmentState.STA);
        authenticationThread.Start();

        // Block until thread completion
        authenticationThread.Join(); // Application hangs here

        return authResult;
    }

    private static void threadMethod() {
        // In proper application: set result. But for debugging, return immediately
        return;
    }

Eu sou novo no mulththreading e no WPF, então posso estar fazendo algo estúpido. Alguém vê o que está acontecendo aqui? Para o registro, não recebo o problema se não definir o segmento como STA, mas isso é um requisit

[Editar: parece que o erro ocorre apenas quando eu chamo o método especificado por meio de uma ligação de validação em um modo de exibição WPF, especificamente em um TextBox. Quando eu chamo o mesmo código no construtor da exibição, o código é executado conforme o esperado. Essa seria uma solução viável, mas seria interessante saber o que realmente está acontecendo aqui.]

[Editar: O código aqui foi um pouco simplificado para depuração - no código de produção, o método thread está dentro de um objeto AuthThreadWorker que permite retornar o resultado do processo de autenticação ao objeto authResult. Mas esses detalhes são, até onde sei, não relacionados ao congelamento, pois o congelamento ocorre mesmo no código simplificado.]

questionAnswers(1)

yourAnswerToTheQuestion