主要结合两位大侠的回复 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();// 这句该如何加呢?
} 前两部,感觉有点意思了
但是,界面里调用时,感觉有问题呀,还是糊里糊涂
解决方案 »
- 这个抛错怎么解决?
- 未处理的“System.MissingMethodException”类型的异常出现在 Symbol.Barcode.dll 中
- 调试程序的时候发现在Form3运行结束的时候却还返回来再次运行Form1,请问是怎么回事?
- 请问C# webbroser 怎么自动点击vbscript弹出框
- 一个不算复杂的管理系统,用哪个持久层框架好,请介绍下
- 存储过程为什么不能返回空格呀.
- Dsoframer怎么设置插入书签的字符有下划线
- c#---oledb數據庫聯接的問題
- 高分求 <C#与模式>
- C#的初级问题:
- 询问怎样把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);
}这样是吧