创建博客 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

鲲游别馆

与有肝胆人共事 从无字句处读书

 
 
 

日志

 
 
关于我

北冥有鱼,其名为鲲,鲲之大不知其几千里也, 化而为鸟,其名为鹏,鹏之背不知其几千里也, ……

LOFTER精选

C#串口监听的实现实例操作  

2011-04-11 15:52:48|  分类: .NET |  标签: |举报 |字号 订阅

C#串口监听的实现在 Visual Stdio 2005中,对于串口操作Framework提供了一个很好的类接口-SerialPort,在这当中,串口数据的读取与写入有较大的不同。C#串口监听的实现由于串口不知道数据何时到达,因此有两种方法可以实现C#串口监听之串口数据的读取。1.用线程实时读串口2.用事件触发方式实现。但由于线程实时读串口的效率不是十分高效,因此比较好的方法是事件触发的方式。在SerialPort类中有DataReceived事件,当串口的读缓存有数据到达时则触发DataReceived事件,其中SerialPort.ReceivedBytesThreshold属性决定了当串口读缓存中数据多少个时才触发DataReceived事件,默认为1。

此外,SerialPort.DataReceived事件运行比较特殊,其运行在辅线程,不能与主线程中的显示数据控件直接进行数据传输,必须用间接的方式实现。

C#串口监听实现一、创建WIndow项目,设计界面

C串口监听的实现实例操作 - 十一居士 - 鲲游别馆

 

C#串口监听实现二、编写实现代码


using System;  
using System.Collections.Generic;  
using System.ComponentModel;  
using System.Data;  
using System.Drawing;  
using System.Text;  
using System.Windows.Forms;  
using System.IO.Ports;  
//using Microsoft.VisualBasic.Devices;  
 
//C#串口监听  
namespace Demo  
...{  
public partial class Form1 : Form  
...{  
public Form1()  
...{  
InitializeComponent();  
}  
 
private SerialPort Sp = new SerialPort();  
public delegate void HandleInterfaceUpdataDelegate(string text);  
private HandleInterfaceUpdataDelegate interfaceUpdataHandle;  
 
private void Form1_Load(object sender, EventArgs e)  
...{  
tbID.Focus();  
BtPause.Enabled = false;  
}  
 
private void UpdateTextBox(string text)  
...{  
tbData.Text = text;  
}  
 
public void Sp_DataReceived(object sender,  
System.IO.Ports.SerialDataReceivedEventArgs e)  
...{  
byte[] readBuffer = new byte[Sp.ReadBufferSize];  
Sp.Read(readBuffer, 0, readBuffer.Length);  
this.Invoke(interfaceUpdataHandle,  
 new string[] ...{ Encoding.UTF8.GetString(readBuffer) });  
}  
 
private void Form1_FormClosing(  
object sender, FormClosingEventArgs e)  
...{  
Sp.Close();  
}  
 
private void btENT_Click(object sender, EventArgs e)  
...{  
if ((tbID.Text.Trim() != "") &&   
(cmRate.Text != ""))  
...{  
interfaceUpdataHandle =   
new HandleInterfaceUpdataDelegate(UpdateTextBox);  
//C#串口监听之实例化委托对象  
Sp.PortName = tbID.Text.Trim();  
serialPort1.BaudRate =   
Convert.ToInt32(cmRate.Text.Trim());  
Sp.Parity = Parity.None;  
Sp.StopBits = StopBits.One;  
Sp.DataReceived +=   
new SerialDataReceivedEventHandler(Sp_DataReceived);  
Sp.ReceivedBytesThreshold = 1;  
try 
...{  
Sp.Open();  
tbID.ReadOnly = true;  
BtPause.Enabled = true;  
btENT.Enabled = false;  
}  
catch 
...{  
MessageBox.Show(  
"端口" + tbID.Text.Trim() + "打开失败!");  
}  
}//C#串口监听  
else 
...{  
MessageBox.Show("请输入正确的端口号和波特率!");  
tbID.Focus();  
}  
}  
 
private void BtPause_Click(  
object sender, EventArgs e)  
...{  
Sp.Close();  
tbID.ReadOnly = false;  
btENT.Enabled = true;  
BtPause.Enabled = false;  
}  
}//C#串口监听  
}  

C#串口监听具体的实现操作就向你介绍到这里,希望对你了解和学习C#串口监听的实现有所帮助。

  评论这张
 
阅读(304)| 评论(0)
推荐 转载

历史上的今天

最近读者

热度

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2014