반사 중 전달 방법 매개 변수 및 등록 이벤트 처리

4721 단어
최근에 플러그인 형식의 응용 구성 요소를 만들고 반사 지식을 사용했기 때문에 이 글을 써서 앞으로 더 잘 이해할 수 있도록 하고 비슷한 기능을 하는 친구들도 참고하고 싶습니다.
라이브러리 코드:
using System;
using System.IO;
using System.Net;
using System.Net.Sockets;
using System.Reflection;
using System.Text;

namespace Interface
{
    public class Server
    {
        private Socket _serverSocket;
        private byte[] _byteData = new byte[1024];
        public event EventHandler OnReceiveEvent;

        public void Listener()
        {
        try
            {
                _port = ConfigManager.AppSettings["Port"].Value;

                //  socket,     IP、port
                _serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
                //    IP,  TCP            
                var ip = new IPEndPoint(IPAddress.Any, Convert.ToInt32(_port));
                //      
                _serverSocket.Bind(ip);

                //    client  
                var sender = new IPEndPoint(IPAddress.Any, 0);
                var remote = (EndPoint)(sender);

                _serverSocket.BeginReceiveFrom(_byteData, 0, _byteData.Length, SocketFlags.None, ref remote, OnReceive, remote);
            }
            catch (Exception ex)
            {
                Log.Error(ex.Message);
            }
        }

        private void OnReceive(IAsyncResult ar)
        {
                string str = "Hello";
                if (OnReceiveEvent != null)
                    OnReceiveEvent(str, null);
        }
}

반사 호출 방법:
public void Listener()
        {
            try
            {
                //     (dll    ),  Assembly  
                Assembly assembly = Assembly.LoadFile(AppDomain.CurrentDomain.BaseDirectory + "Interface.dll");
                //    ,  (    + )
                Type type = assembly.GetType("Interface.Server");
                //        ,object  ,  (    + 
                object instance = assembly.CreateInstance("Interface.Server");
                MethodInfo method = type.GetMethod("Listener"); //     

                EventInfo eventinfo = type.GetEvent("OnReceiveEvent");
                //            
                if (eventinfo != null)
                    eventinfo.AddEventHandler(instance, new EventHandler(OnReceive));
                method.Invoke(instance, null);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

        public void OnReceive(object sender, EventArgs e)
        {
            lbLogs.Items.Add("Server receive: " + sender);
        }

 

좋은 웹페이지 즐겨찾기