1.添加using Sysytem.IO.Ports或者直接往界面里面放入一个serialport控件
2.public SerialPort serialPort1=new SerialPort ();实例化对象(如果是放控件的方式就不用了)
private string b;//用来显示接收到的数据
3.serialPort1.DataReceived += new SerialDataReceivedEventHandler(serialPort1_DataReceived);//定义串口接收事件*/
4.private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
if (serialPort1.BytesToRead == 0)
{
return;
}
char[] buffer = new char[serialPort1.BytesToRead];
serialPort1.Read(buffer, 0, serialPort1.BytesToRead);
b = new string(buffer); //借用楼上
this.Invoke(SerialDelegate);//委托机制显示接收到的数据
}
5.打开串口try
{
if (serialPort1.IsOpen == false)
{
serialPort1.Open();
}
else
{
serialPort1.Close();
serialPort1.Open();
}
}
catch (Exception e)
{
//MessageBox.Show("错误:" + e.Message);
//if (e.Message == "对端口”COM1“的访问被拒绝。")
MessageBox .Show ("当前设置的串口不存在或者已经被占用,请重新设置串口并尝试连接");
}
if (serialPort1.IsOpen == true)
{
serialPort1.DiscardOutBuffer();
}
6.由于线程安全问题,如果要将接收到的数据显示出来需要使用委托的机制,故:
private delegate void MydelegateShow();//声明一个委托
private MydelegateShow SerialDelegate;//实例化一个委托对象
同时在窗口构造函数中添加SerialDelegate = new MydelegateShow(UpdateBox);
7.编写UpdateBox代码:
private void UpdateBox()
{
textBox1.Text+=b;
}
8.发送是主动的,可以按照需求发送就可以
2)微软 .Net Remoting系列专题之三:Remoting事件处理全接触 应用Remoting技术的分布式处理程序,通常包括三部分:远程对象、服务端、客户端。因此从事件的方向上看,就应该有三种形式:
1、服务端订阅客户端事件
2、客户端订阅服务端事件
3、客户端订阅客户端事件 服务端订阅客户端事件,即由客户端发送消息,服务端捕捉该消息,然后响应该事件,相当于下级向上级发传真。反过来,客户端订阅服务端事件,则是由服务端发送消息,此时,所有客户端均捕获该消息,激发事件,相当于是一个系统广播。而客户端订阅客户端事件呢?就类似于聊天了。由某个客户端发出消息,其他客户端捕获该消息,激发事件。可惜的是,我并没有找到私聊的解决办法。当客户端发出消息后,只要订阅了该事件的,都会获得该信息。
|