主要结合两位大侠的回复 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();// 这句该如何加呢?
} 前两部,感觉有点意思了
但是,界面里调用时,感觉有问题呀,还是糊里糊涂
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();// 这句该如何加呢?
} 前两部,感觉有点意思了
但是,界面里调用时,感觉有问题呀,还是糊里糊涂
解决方案 »
- 请大家帮忙看看,关于【Reptear绑定数据双引号和单引号解析的问题】
- 各位朋友帮帮忙C#项目中有一个问题????????
- word文档解析[急HELP]
- 关于定制属性
- 请问在将一个自定义对象绑定到DataGridView时,如果控制DataGridView中属性列的显示顺序?
- 准备用C#做个项目,进就有分!谢谢XDJM
- 求助各位高手,大侠.帮忙解决DataGrid分页问题
- 客户端(Customer 不同的Nat)如何实时获取到后台(java Server端)推送的消息内容
- c# 如何动态创建添加元素属性值
- 怎样让DataGridView中选中的行随鼠标滚轮滚动而上下滚动
- 询问怎样把C# windows form中的三方控件拿出来
- winform 单机版使用那种数据库比较好?
private void Foo(object sender, DataReceivedArgs e)
{
//do someting
}ts.DataReceived += new DataReceivedArgs(Foo);
http://topic.csdn.net/u/20120614/23/52e322d7-1ddd-4c8e-ae68-756e121d07ff.html
{
ts.DataReceived += new DataReceivedArgs(Foo);
//提示,foo与 委托 DataReceivedArgs 不匹配,咋回事?
} private void Foo(object sender, DataReceivedArgs e)
{
//do someting
}
{
}
private void button10_Click(object sender, EventArgs e)
{
TcpSocketLayer my = new TcpSocketLayer();
my.DataReceived += new EventHandler<DataReceivedArgs>(Foo);
}
您开始这样,在我这里也不行的
不过修改了
public delegate void DataReceivedArgs(object sender, EventArgs e);
为这句后
public delegate void EventHandler(object sender, EventArgs e); 就可以了
但是,我 异步接收的函数里 返回的 "sss " 怎么在界面调用时得到?
并显示到界面呢?
{
//do someting
MessageBox.Show(e.Msg);
}这样是吧