Я только что понял в фоновом потоке 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, и что в нем такого особенного, что делегаты должны приводиться?