Вызов Диспетчер WPF с анонимным методом

Я только что понял в фоновом потоке C # .Net 4.0 WPF, что это не работает (ошибка компилятора):

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

Из некоторых примеров я узнал, что его нужно приводить следующим образом: (Action) delegate () . Однако в других примерах он передается другим классам, например System.Windows.Forms.MethodInvoker .

Кто-нибудь может сказать мне, что именно не так в приведенном выше примере? Я также пытался воспроизвести его с помощью других методов, но он всегда работал без приведения:

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();
}

Так какой же лучший (самый элегантный, менее избыточный) способ вызвать Dispatcher, и что в нем такого особенного, что делегаты должны приводиться?

9
задан Hannobo 5 June 2011 в 20:45
поделиться