我想了解下面的代码实际上是做什么的。
我们有Submit
方法返回void
并且有两个参数:
然后我们用参数调用Submit
方法。
这部分代码我不明白。
void Submit(Delegate d, params object[] arguments)
{
ServiceQueue.Get.Submit(d, arguments);
}
Submit(new Func<BusinessMetadataQueryDataContract,
AsyncCallback,
object,
IAsyncResult>(
this.Channel.BeginBusinessMetadataGet),
contract,
new AsyncCallback(
(iar) =>
{
BusinessMetadataDataContract outContract = null;
Action<Exception, OpusReturnType> response =
(e, ort) =>
{
SilverlightClient.UIThread.Run(() =>
{
this.BusinessMetadataGetActionCompleted(this,
new ActionCompletedEventArgs<BusinessMetadataDataContract>(
ort,
outContract,
e,
false,
asyncState));
});
};
try
{
response(null,
this.Channel.EndBusinessMetadataGet(
out outContract,
iar));
}
catch (Exception e)
{
response(e,
new OpusReturnType());
}
}),
asyncState);
Func
方法接受三个参数并返回值。
所以我们有类型的参数:
我们有返回类型:
然后我们有:(this.Channel.BeginBusinessMetadataGet),
我不明白。这是做什么的?我期待一个左括号(
和第一个BusinessMetadataQueryDataContract
类型的参数,而我得到(this.Channel.BeginBusinessMetadataGet)
,预期参数位于第二个位置。
我必须在这里遗漏一些东西。
有任何帮助吗?谢谢!
答案 0 :(得分:1)
this.Channel.BeginBusinessMetadataGet是实际的委托,它具有您描述的签名。所以第一个参数(代表d)是这样的:
new Func<BusinessMetadataQueryDataContract,
AsyncCallback,
object,
IAsyncResult>(
this.Channel.BeginBusinessMetadataGet)
这将从方法BeginBusinessMetadataGet创建一个委托。在此之后是代表将使用的所有参数。