c# 串口通讯问题,,基础问题~大家乱进!!

首先声明,我是特菜的菜鸟。
我想要知道串口通讯的过程。我用的的VS2005,我想要各位达人给我讲讲串口通讯的详细过程。越详细越好。
我在2005里有SerialPort类。不过我想知道这里类的一些详细的说明,尤其是关于读写缓存区的。他是每次读完全部缓存区还是只读取变化的部分?
还有发送数据部分,如果我的内容比较长,那是否会出现。我发送123,接收成321的情况,望赐教。越详细越好!
最好有个简单的源码,然后附上中文的说明!
希望回复的更详细些,我主要是关心收数据。在网上看了很多资料介绍了多线程接受数据。避免主线程阻塞。(我真的很菜。不明白阻塞的实际意思,但我猜应该会导致整个软件响应变慢)。我不明白这个多线程是如何实现的,还有这个多线程是如何避免阻塞的。望赐教!!

再补充下,希望得到多线程接收串口信息的详细 说明。。我明白多线程的作用,但是不明白如何写这个多线程。之前只写过一条逻辑的线,如果,那么,否则,或者FOR循环一类的东西。线程只是知道有这么个概念,但不知道如何实现。VS2005里面有SerialPort类,但是我没有找到关于这个类的方法的详细参数说明的文章。

其实几位的回答都对我有帮助,但还没让我彻底明白这个问题。所以只好加分等了。。

你发送123不会读成321的,大概会出现这样的情况,1:先读到1 然后读到23
2:先读到12 然后读到3 3:直接读到123+N个空格符。所以你读到的数据一定要有个结束符来标识读完毕了,一般都是回车换行符,因为你读到1,然后23 这样23后面有个回车换行符,而1后面没有。这样表示读到23表示读完毕了。所以你在发送端在发送123的时候加上个回车换行符以表示一个数据发送完毕。接受方不停的读缓存区直到读到一个回车符才把一个完整的数据抛出来,否则一直在读。
主线程阻塞:你程序启动就是一个主线程,假如你在程序代码里写一个死循环,那么你整个程序都会卡死在那里,你程序无法响应你的任何事件,包含拖动,点击等等,但是你把这个死循环写到其他一个线程里面去,那么这时你的程序不会有任何影响,因为线程是CPU调度的,所以一般主程序里面不要写一些耗时间的代码,这些尽量写到其他线程里面去,避免程序假死状态,就是一般的未响应状态,你自己试试就知道了。 在程序启动以后写一个死循环 不停的循环。然后再把这个循环写到线程里!两种效果一下就看出来了!
温馨提示:内容为网友见解,仅供参考
第1个回答  2009-08-26
SerialPort comm = new SerialPort();
comm.PortName = "COM1"; //COM口号
comm.BaudRate = 4800; //波特率
comm.DataBits = 8; //比特率
comm.Parity = Parity.None;
comm.StopBits = StopBits.One;
comm.ReceivedBytesThreshold = 1;
//-----------上面一些串口的参数,根据实际的设备来设置

comm.DataReceived += new SerialDataReceivedEventHandler(comm_DataReceived); //收到数据的处理

comm.WriteLine("Test"); //发送数据

void comm_DataReceived(object sender, SerialDataReceivedEventArgs e){
SerialPort sp = sender as SerialPort;
Console.WriteLine(sp.ReadExisting());
}本回答被网友采纳
相似回答