TcpSocketLayer.cs文件中的接受如下:public void OnReceivedData(IAsyncResult ar)
        {
            if (!ar.IsCompleted)
            {
                return;
            }
            Socket s = (Socket)ar.AsyncState;
            try
            {
                int size = s.EndReceive(ar);               
                string sss = "";
                if (size > 0)
                {                    
                    for (int i = 0; i < size; i++)
                    {
                        sss += bufferReceive[i].ToString("x2");
                    }
                    globalTasString = sss;                   
                    ReciveTriger = true;                   
                }
                s.BeginReceive(bufferReceive, 0, 1024, SocketFlags.None, new AsyncCallback(OnReceivedData), s);
            }
            catch (SocketException E)
            {
            }
        }from1.cs 的按钮事件里的代码:
 if (TcpSocketLayer.ReciveTriger == true)
            {
               showEPCToListView(TcpSocketLayer.globalTasString);// 显示到Listview上
               TcpSocketLayer.ReciveTriger = false;
            }现在有问题, 就是这个方法,滞后一次,看来这样实现有问题有人推荐过 事件驱动
 搜了一下,这个又牵扯到委托 啥的,没接触过,头疼希望高手赐教呀,, 如何才能将TcpSocketLayer.cs里这个 接受函数的内容返回出来在form1.cs里 调用呢
谢谢

解决方案 »

  1.   

    很简单,你只需要自定义一个事件,然后在接收完毕后,触发一下这个事件,委托是必须的了,你google一下 “c# 自定义事件”,搞懂这个就行了
      

  2.   


    EventHandler 可以换成自己需要的类,以增加其他信息
        public class TcpSocketLayer
        {
            public event EventHandler Revived;
            public void OnReceivedData(IAsyncResult ar)
            {
    //do something
                if (Revived != null)
                {
                    Revived(this, new EventArgs());//触发事件
                }
            }
        }
    窗体调用
                TcpSocketLayer my = new MyClass();
                my.Revived +=new EventHandler(my_Revived);        private void my_Revived(object sender, EventArgs e)
            {
    //这里处理界面
            }
      

  3.   

    您这里没看到 委托这个单词呀周末得去图书馆借本书 好好了解一下,公司网络不济
    google不给用,论坛基本都封了 bbs这样的
      

  4.   

    EventHandler 如果你自己定义就需要委托,因为如果你需要传递更多的信息,就要自己定义
    EventHandler 的定义如下
    public delegate void EventHandler(object sender, EventArgs e);