Por que exceções não são propagadas pelo WPF Dispatcher.Invoke?

Aqui está o meu exemplo hipotético. Eu tenho uma janela WPF muito simples com um botão. O evento Button.Click possui um manipulador que é assim.

Action doit = () =>
{
    Action error = () => { throw new InvalidOperationException("test"); };

    try {
        this.Dispatcher.Invoke(error, DispatcherPriority.Normal);
    } catch (Exception ex) {
        System.Diagnostics.Trace.WriteLine(ex);
        throw;
    }
};
doit.BeginInvoke(null, null);

Eu esperaria que a exceção fosse capturada e anotada peloTrace.WriteLine ligar. Em vez disso, nenhuma exceção é capturada e o aplicativo é interrompido.

Alguém sabe de uma possível explicação para isso acontecer? E que solução alternativa você sugere para capturar exceções lançadas pelo delegado invocado porDispatcher.Invoke?

Atualização 1: Eu coloquei umthrow no código de manipulação de exceção. Na verdade, não quero ignorar a exceção. O ponto principal da minha pergunta é lidar com isso corretamente. O problema é que o código de manipulação de exceção nunca é executado.

Lembre-se de que este é um exemplo hipotético. Meu código real não é assim. Além disso, suponha que eu não possa alterar o código no método a ser chamado.

Atualização 2: Considere este exemplo semelhante. Em vez de uma janela WPF, eu tenho uma janela Windows Forms. Ele tem um botão com quase o mesmo manipulador. A única diferença está no código de chamada. É assim.

this.Invoke(error);

No Windows Forms, o código de manipulação de exceção é executado. Por que a diferença?

questionAnswers(1)

yourAnswerToTheQuestion