先去看那个ISomeCallbackContract的定义,那个定义非常重要,用来规定在客户端执行的方法用的。
所谓的双工,就是这么处理的,服务端在某个时间(可以用定时器)执行客户端方法(回调函数),而客户端方法的定义在服务端是不知道的,服务端只能知道方法名,也就是那个ISomeCallbackContract接口定义里面的所有方法名,例如它有个SomeCallbackMethod方法,就去执行了。虽然代码在服务端调用,但最终都是在客户端执行的。事实上这个例子并不好,没有参数,因此仅仅执行了一个无意义的方法,一般回调函数都要带上参数传递给客户端,通知客户端具体消息内容,然后让客户端做处理。
如果你还是不能理解,先去看什么是委托,什么是事件。然后看异步操作里面的委托回调。不推荐使用WCF的双工模式编程,弊大于利,除非只是去学习,不可用于实际工业项目,否则麻烦的事会不断。
所谓的双工,就是这么处理的,服务端在某个时间(可以用定时器)执行客户端方法(回调函数),而客户端方法的定义在服务端是不知道的,服务端只能知道方法名,也就是那个ISomeCallbackContract接口定义里面的所有方法名,例如它有个SomeCallbackMethod方法,就去执行了。虽然代码在服务端调用,但最终都是在客户端执行的。事实上这个例子并不好,没有参数,因此仅仅执行了一个无意义的方法,一般回调函数都要带上参数传递给客户端,通知客户端具体消息内容,然后让客户端做处理。
如果你还是不能理解,先去看什么是委托,什么是事件。然后看异步操作里面的委托回调。不推荐使用WCF的双工模式编程,弊大于利,除非只是去学习,不可用于实际工业项目,否则麻烦的事会不断。
//关键是这句, 把它分两部分来解释
Action<ISomeCallbackContract> invoke 相当于定义了一个函数指针,
这个函数指针能指向没有返回值,带一个ISomeCallbackContract类型参数的函数.
也就是说,假设有这么样的A,B两个函数 ,那么我就个可把A,B的函数名赋值给invoke
class DelegateTest{
//没有返回值,带一个ISomeCallbackContract类型参数的函数.
static void A(ISomeCallbackContract callbackContract){}
static void B(ISomeCallbackContract callbackContract){}
static public void CallClients() {
Action<ISomeCallbackContract> invoke ;
invoke=A;
invoke=B;
}
//下面这句就是 匿名函数
delegate(ISomeCallbackContract callback) {
callback.SomeCallbackMethod();
}
它实际上正是返回值为void带一个ISomeCallbackContract的函数,只不过它没有名字.
它相当于如下的函数
void 匿名(ISomeCallbackContract callback)
{
callback.SomeCallbackMethod();
}
当把这个匿名函数的值给了invoke后,以后你再看到对的调用invoke就相当于在调用这个匿名函数.
再看下面这个回调列表,
m_Callbacks.ForEach(invoke);
不用说回调列表里都是ISomeCallbackContract类型对象的集合,集合里的
元素正是invoke所需要的参数,
ForEach是遍历每个ISomeCallbackContract对象并做为参数来调用invoke.我想你应该理解了吧
循环执行这个委托方法。