Наследование: System.MarshalByRefObject
Пример #1
0
        }     //ClientInvoke

        /// <summary>
        /// Used by AsyncClient.Run() to invoke the proxy method repeatedly.
        /// </summary>
        /// <param name="obj"></param>
        public void ClientInvokeAsync(object RemoteObj)
        {
            try
            {
                if (RemoteObj == null)
                {
                    Console.WriteLine("Could not locate server.");
                    return;
                }//if

                switch (m_CallConv)
                {
                case CallingConvention.ByRef:
                {
                    AsyncCallback    cb   = new AsyncCallback(ByRefCallBack);
                    HelloServerByRef hsbr = (HelloServerByRef)RemoteObj;
                    ByRefDelegate    del  = new ByRefDelegate(hsbr.HelloMethod);
                    ForwardByRef     fbr  = new ForwardByRef();
                    IAsyncResult     ar   = del.BeginInvoke("Calling ByRef async", fbr, cb, null);
                    lock (this)
                    {
                        m_ResetEvent = new ManualResetEvent(false);
                    }//lock
                    m_ResetEvent.WaitOne();
                    if (m_ThreadNumber > 0)
                    {
                        Console.WriteLine("From thread {0}", m_ThreadNumber.ToString());
                    } //if
                    break;
                }     //case

                case CallingConvention.ByVal:
                {
                    AsyncCallback    cb   = new AsyncCallback(ByValCallBack);
                    HelloServerByVal hsbv = (HelloServerByVal)RemoteObj;
                    ByValDelegate    del  = new ByValDelegate(hsbv.HelloMethod);
                    ForwardByVal     fbv  = new ForwardByVal();
                    IAsyncResult     ar   = del.BeginInvoke("Calling ByVal async", fbv, cb, null);
                    lock (this)
                    {
                        m_ResetEvent = new ManualResetEvent(false);
                    }//lock
                    m_ResetEvent.WaitOne();
                    if (m_ThreadNumber > 0)
                    {
                        Console.WriteLine("From thread {0}", m_ThreadNumber.ToString());
                    } //if
                    break;
                }     //case
                }     //switch
            }         //try
            catch (Exception e)
            {
                Console.WriteLine("Exception in Client.ClientInvokeAsync(): {0}", e.ToString());
                System.Diagnostics.Process.GetCurrentProcess().Kill();
            } //catch
            return;
        }     //ClientInvokeAsync()
Пример #2
0
        }     //Run()

        /// <summary>
        /// Sequential invocation method.
        /// </summary>
        /// <param name="RemoteObj"></param>
        public void ClientInvoke(object RemoteObj)
        //public void ClientInvoke()
        {
            try
            {
                if (RemoteObj == null)
                {
                    Console.WriteLine("Could not locate server.");
                    return;
                }//if

                lock (this)
                {
                    switch (m_CallConv)
                    {
                    case CallingConvention.ByRef:
                    {
                        HelloServerByRef hsbr = (HelloServerByRef)RemoteObj;
                        ForwardByRef     fbr  = new ForwardByRef();
                        string           str  = hsbr.HelloMethod("Calling ByRef sequential", fbr);
                        Console.WriteLine("Output from HelloMethod(): {0}", str);

                        if (m_ThreadNumber > 0)
                        {
                            Console.WriteLine("From thread {0}", m_ThreadNumber.ToString());
                        }//if
                        break;
                    }

                    case CallingConvention.ByVal:
                    {
                        HelloServerByVal hsbv      = (HelloServerByVal)RemoteObj;
                        ForwardByVal     fbv       = new ForwardByVal();
                        ForwardByVal     returnfbv = hsbv.HelloMethod("Calling ByVal sequential", fbv);
                        Console.WriteLine("Output from forwarded object: {0}", returnfbv.Message);
                        if (m_ThreadNumber > 0)
                        {
                            Console.WriteLine("From thread {0}", m_ThreadNumber.ToString());
                        }//if
                        break;
                    }

                    default:
                        throw new System.InvalidOperationException("Invalid calling convention in Run()");
                    } //switch
                }     //end lock(this)
            }         //try
            catch (Exception e)
            {
                Console.WriteLine("Exception in Client.ClientInvoke(): {0}", e.ToString());
                System.Diagnostics.Process.GetCurrentProcess().Kill();
            } //catch
            return;
        }     //ClientInvoke