我试图调用System.Windows.Threading.Dispatcher.BeginInvoke 。 该方法的签名是这样的: BeginInvoke(Delegate method, params object[] args) 我试图将它传递给一个Lambda,而不必创build一个Delegate。 _dispatcher.BeginInvoke((sender) => { DoSomething(); }, new object[] { this } ); 它给我一个编译器错误,说我不能将lambda转换为System.Delegate。 委托的签名将一个对象作为参数并返回void。 我的lambda匹配这个,但它不工作。 我错过了什么?
[编辑,完全改编:]似乎我的问题确实措辞不好,而且也不好受。 所以我希望这个完整的改写帮助… MSDN告诉清楚指定: Control.BeginInvoke()在创build控件句柄的线程上执行委托,通常这将是GUI线程。 Dispatcher.BeginInvoke()将在创buildDispatcher对象的线程上运行。 这将是我创build的任何线程。 但是对于委托, “ CLR自动定义 BeginInvoke和EndInvoke”,而这些调用在ThreadPool-thread上运行。 除了这个有点令人惊讶的不同的行为,我不知道如何find自动实现的所有function的规格。 例如:Intelli-sense显示我的委托具有DynamicInvoke()。 类System.Delegate {}确实有一个DynamicInvoke()这可能意味着我的代理inheritance它。 但委托{}没有BeginInvoke()。 而Delegate {}有几个我的委托没有的function。 另外我的委托获取GetObjectData()方法。 这似乎来自可分离的。 所以总而言之,出现一个委托从(1)CLR“自动”获取它的方法,(2)委托的一些子集可能MulticastDelegate {},可能(3)ISerializble。 我在哪里可以find委托人获得的所有方法的全面规范? 特别有趣的是BeginInvoke(),它是确切的签名,因为上述两个具有该名称的方法具有不同的签名集合。 [有人在编辑中build议“代表”是“代表”。 我敢说,不是。] 谢谢
只是想知道BeginInvoke()和Invoke()之间的区别是什么? 主要是每一个将被用于什么。 编辑:创build一个线程对象和调用该调用,只是调用BeginInvoke()上的BeginInvoke()之间有什么区别? 还是他们是一样的东西?