ThreadPool.QueueUserWorkItem(x =>
{
//get dataset from web service
BeginInvoke(new Action(() => {
//fill grid
}));
BeginInvoke(new MethodInvoker(() => {
//fill grid
}));
});
在C#2.0中我使用了分配MethodInvoker来从后台线程更新UI,在BeginInvoke下使用时切换到Action是否明智?使用Action更快还是更安全?
答案 0 :(得分:2)
它确实没有什么区别,因为两者都只是没有参数且不返回值的委托类型。但是,就命名语义而言,MethodInvoker
特定于WinForms,因此应限于该范围。 Action
是通用的,可以在框架的任何区域使用。
答案 1 :(得分:1)
它们都是代理,在定义上相互相同(从MSDN中获取):
public delegate void MethodInvoker()
public delegate void Action()
因此,在IL级别,它们应该完全相同。所以我怀疑你使用哪一个很重要。 Action
更具普遍性,更有可能被更多开发人员理解,但MethodInvoker
确实具有更具描述性的名称。选择对你感觉更好的人。
但正如davidsoa指出的那样,你可以跳过它们并直接使用lambda。