主要结合两位大侠的回复 1 先添加一个类如下:
  class DataReceivedArgs : EventArgs
    {
        public string Msg { get; protected set; }        public DataReceivedArgs(string msg)
        {
            Msg = msg;
        }
    }接着,我在tcpsocketlayer.cs里添加如下代码
  
  //  声明
   public event EventHandler<DataReceivedArgs> DataReceived;
   
 // socket 异步接收函数
   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;                   
                    //llrpReciveTriger = true;                   
                }
                // 事件驱动
                if (DataReceived != null)
                {
                    DataReceived(this, new DataReceivedArgs(sss));
                }// 将sss 返回给界面层调用                s.BeginReceive(bufferReceive, 0, 1024, SocketFlags.None, new AsyncCallback(OnReceivedData), s);
            }
            catch (SocketException E)
            {
            }
        }
接下来,就是界面上调用了
 首先声明
  public delegate void DataReceivedArgs(object sender, EventArgs e);
  TcpSocketLayer ts = new llrpTcpSocketLayer();   private void button3_Click(object sender, EventArgs e)
        {
            string sss;
             ts.sendCommandCode(cmd); 发送一个命令         ts.DataReceived += new DataReceivedArgs();// 这句该如何加呢?
      
        }  前两部,感觉有点意思了
 但是,界面里调用时,感觉有问题呀,还是糊里糊涂

解决方案 »

  1.   


    private void Foo(object sender, DataReceivedArgs e)
    {
    //do someting
    }ts.DataReceived += new DataReceivedArgs(Foo);
      

  2.   

    我以前发的一个UDPServer
    http://topic.csdn.net/u/20120614/23/52e322d7-1ddd-4c8e-ae68-756e121d07ff.html
      

  3.   

     private void button3_Click(object sender, EventArgs e)
            {           
                ts.DataReceived += new DataReceivedArgs(Foo);
                //提示,foo与 委托  DataReceivedArgs 不匹配,咋回事?    
            }        private void Foo(object sender, DataReceivedArgs e)
            {
                //do someting
                
            }
      

  4.   

    下面这样没错啊        private void Foo(object sender, DataReceivedArgs e)
            {
            }
            private void button10_Click(object sender, EventArgs e)
            {
                TcpSocketLayer my = new TcpSocketLayer();
                my.DataReceived += new EventHandler<DataReceivedArgs>(Foo);
            }
      

  5.   


     您开始这样,在我这里也不行的
     不过修改了
      public delegate void DataReceivedArgs(object sender, EventArgs e);
     为这句后
     public delegate void EventHandler(object sender, EventArgs e);  就可以了
      
     但是,我 异步接收的函数里 返回的 "sss " 怎么在界面调用时得到?
     并显示到界面呢?
      

  6.   

     private void Foo(object sender, DataReceivedArgs e)
            {
                //do someting
                MessageBox.Show(e.Msg);
            }这样是吧