我刚刚意识到,在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最佳的方法是什么(最优雅、最少冗余),为什么委托必须要转换类型才能使用它?