zoukankan      html  css  js  c++  java
  • .NET Remoting 经典远程回调模型(二)

             为了简化客户端代码,可以将远程对象实现为异步操作的形式。

             那么,当异步操作完成时如何通知客户端呢??

             这里,来说下第二种,使用定制委托实现回调。

    接着上个SimpleMath类说,

    public class SimpleMath:MarshalByRefObject

    {

         private delegate int opDelegate(int n1, int n2);

         public delegate void ClientCallbackDelegate(int result);

         public int Add(int n1, int n2)

       {

            return n1+n2;

        }

         public void AsyncAdd(int n1,int n2,ClientCallbackDelegate callback)

        {

              opDelegate op=  new opDelegate(Add);

               op.BeginInvoke(n1,n2,new AsycCallback(DoClientCallback),callback);

          }

         private void DoClientCallback(IAsyncResult ar)

         {

              AsyncResult asyncResult=(AsyncResult)ar;

              opDelegate  op= (opDelegate)asyncResult.AsyncDelegate;

             int result=op.EndInvoke(ar);

             ClientCallbackDelegate callback=(ClientCallbackDelegate)ar.AsyncState;

             callback(result);

          }

    }

    //以下这个类是重点:

    //必须把其元数据部署到服务器端;

    //其实现要在客户端。

    //此时,原来的客户端成了服务端,服务端成了客户端。

    public class SimpleMathResult:MarshalByRefObject

    {

          public void MathCallback(int result)

           {

                 Console.WriteLine(result.tostring());

             }

    }

    class ClientMain

    {

         static void Main(string[] args)

         {

                RemotingConfguration.Configure("MathClient.exe.config");

               SimpleMath math= new SimpleMath();

               SimpleMathResult mathResult= new SimpleMathResult();

               math.AsyncAdd(5,2,new SimpleMath.ClientCallbackDelegate(mathResult.MathCallback));

          }

    }

    其实重点还是怎样传递委托实例,去调用我们对应的方法,这点很重要。

  • 相关阅读:
    bzoj1861 书架
    vijos2055 移动金币
    POJ2096 Collecting Bugs
    vijos2054 SDOI2019 热闹的聚会与尴尬的聚会
    vijos2051 SDOI2019 快速查询
    bzoj2215 POI2011 Conspiracy
    数据结构和算法(Golang实现)(2)简单入门Golang-包、变量和函数
    数据结构和算法(Golang实现)(1)简单入门Golang-前言
    Jupyter交互式工具安装使用
    Jekyll自动检测代码更新
  • 原文地址:https://www.cnblogs.com/Mayvar/p/wanghonghua20091204.html
Copyright © 2011-2022 走看看