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里 调用呢
谢谢
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)
{
//这里处理界面
}
google不给用,论坛基本都封了 bbs这样的
EventHandler 的定义如下
public delegate void EventHandler(object sender, EventArgs e);