当前位置: 代码迷 >> C# >> 关于不同项目嘱托的实现
  详细解决方案

关于不同项目嘱托的实现

热度:99   发布时间:2016-05-05 03:31:56.0
关于不同项目委托的实现
网上百度socket的程序。其中在项目一有一个窗体程序,项目二是一些具体的方法类。现在希望在窗体里面写好函数委托,用来修改一个txtbox里面的值,具体的值在项目二的类里面,然后就希望把委托传过去让项目一类里面动态执行
using SocketLibrary; //项目2
public delegate void ShowSystemLog(string Message);
        public ShowSystemLog _ShowSystemLog = null;
        public void ShowSystemLogMethod(string Message)
        {
            try
            {
                this.txtReceive.Text=Message;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        public SocketLibrary.SocketFactory factory = null;
        public SocketLibrary.Connection _connection = null;
        private void Form1_Load(object sender, EventArgs e) //项目1
        {
            _ShowSystemLog = new ShowSystemLog(ShowSystemLogMethod);
            factory=new SocketFactory();
            factory.StartServer(Port1); //想要传一个委托进去
        }


public void StartServer(int port) //项目2的SocketFactory类里面的一个StartServer函数
        {

            TcpListener listener = new TcpListener(IPAddress.Any, port);

            listener.Start();

            Server server = new Server(listener);

            _serverListenThread = new System.Threading.Thread(new System.Threading.ThreadStart(server.Start));

            _serverListenThread.Start();

            server.StartListen();

        }

public void Listenning() //项目2的Server类的监听函数
        {

            while (true)
            {

                System.Threading.Thread.Sleep(200);

                foreach (Connection connection in this._connections)
                {

                    if (connection.NetworkStream.CanRead && connection.NetworkStream.DataAvailable)
                    {

                        byte[] buffer = new byte[1024];

                        int count = connection.NetworkStream.Read(buffer, 0, buffer.Length);
                        
                        Console.Write(SocketFactory.DefaultEncoding.GetString(buffer, 0, count)); //原先是输出在控制台的,希望传一个函数进来能修改txtBox的值

                    }

                }

            }

        }
        private System.Threading.Thread _listenningthread;
        public void StartListen()
        {

            _listenningthread = new System.Threading.Thread(new System.Threading.ThreadStart(Listenning));

            _listenningthread.Start();

        }
------解决思路----------------------
自定义事件,需要时触发这个事件,外围调用者只需绑定这个事件即可,就像按钮一样,绑定他的click事件
------解决思路----------------------
1、存在实例就可直接调用 定义的 委托事件
否则需要定义一个静态委托事件
2、可考虑直接 初始化一个线程,异步执行
  相关解决方案