【发布时间】:2011-06-05 20:45:04
【问题描述】:
我刚刚在 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 的最佳(最优雅、更少冗余)的方式是什么,它有什么特别之处以至于必须强制转换委托?
【问题讨论】:
标签: c# .net wpf delegates dispatcher