Invocación de WPF Dispatcher con método anónimo

Me acabo de dar cuenta en un subproceso de fondo C # .Net 4.0 WPF de que esto no funciona (error del compilador):

Dispatcher.Invoke(DispatcherPriority.Normal, delegate()
{
    // do stuff to UI
});

De algunos ejemplos descubrí que tenía que ser lanzado así:(Action)delegate(). Sin embargo, en otros ejemplos se lanza a otras clases, p. @System.Windows.Forms.MethodInvoker.

¿Alguien puede decirme qué está mal exactamente con el ejemplo anterior? También intenté reproducirlo con otros métodos, pero siempre funcionaba sin transmitir:

delegate void MyAction();
void Method1(MyAction a) {
    // do stuff
}

void Method2(Action a) {
    // do stuff
}

void Tests()
{
    Method1(delegate()
    {
        // works
    });

    Method2(delegate()
    {
        // works
    });

    Method1(() =>
    { 
        // works
    });

    Method2(() =>
    {
        // works
    });

    Method2(new Action(delegate()
    {
        // works
    }));

    new System.Threading.Thread(delegate()
    {
        // works
    }).Start();
}

Entonces, ¿cuál es la mejor manera (más elegante, menos redundante) de invocar al Despachador, y qué tiene de especial que los delegados deben ser emitidos?

Respuestas a la pregunta(4)

Su respuesta a la pregunta