SerialPort 做winform程序的问题汇总与解决
2013-07-19 15:27
120 查看
这几天用SerialPort取串口数据,NFC打卡通过USB转串口上传ID数据。出现几个问题,记录一下。
1.SerialPort通过DataReceived这个事件机制取数据。
1.1用SerialPort的方法:ReadExisting,这个直接拿到的字符串是乱码。通过上面的buffer再转16进制的字符串就没问题
1.2 刚开始不知道有这个事件,居然自己写死循环的线程去监听,太傻太天真了。
1.3上面的代码调试没问题。但是生成exe运行就出问题了,每次只能取出传上来的一个字节。想了很久都无解,要投降的时候我用MessageBox.Show一下,发现能取出完整数据了。第一直觉一定是线程的问题。慢慢理清:MessageBox.Show把线程挂起,数据传输完整后才输出,之前一定是有第一个字节进来就触发了这个事件。所以我在上面的第二行代码添加了Thread.Sleep(100);让线程睡一下,等数据完整后再往下走。结果真的是我预料中。
1.4 程序启动后上传数据前几次都没问题。突然我进行了其他操作,如打开浏览器,SerialPort就自动关闭了。遇到这个问题刚开始我以为是NFC硬件问题。后来不管了,我强制一个线程轮询:一发现串口关闭了,我就主动打开。
1.5 解决了1.4的问题,又代来新的问题,我程序都关了,线程还在跑。导致串口一直被占用。于是我在FormClosing事件中添加如下:程序一关,什么相关东西都关了。
搞定收工!
1.SerialPort通过DataReceived这个事件机制取数据。
private void DataReceviedHandler(object sender, SerialDataReceivedEventArgs e) { SerialPort sport = (SerialPort)sender; int count = sport.BytesToRead; Byte[] buffer = new Byte[count]; sport.Read(buffer, 0, count); //取出的buffer就是每次上传的数据。 }
1.1用SerialPort的方法:ReadExisting,这个直接拿到的字符串是乱码。通过上面的buffer再转16进制的字符串就没问题
1.2 刚开始不知道有这个事件,居然自己写死循环的线程去监听,太傻太天真了。
1.3上面的代码调试没问题。但是生成exe运行就出问题了,每次只能取出传上来的一个字节。想了很久都无解,要投降的时候我用MessageBox.Show一下,发现能取出完整数据了。第一直觉一定是线程的问题。慢慢理清:MessageBox.Show把线程挂起,数据传输完整后才输出,之前一定是有第一个字节进来就触发了这个事件。所以我在上面的第二行代码添加了Thread.Sleep(100);让线程睡一下,等数据完整后再往下走。结果真的是我预料中。
1.4 程序启动后上传数据前几次都没问题。突然我进行了其他操作,如打开浏览器,SerialPort就自动关闭了。遇到这个问题刚开始我以为是NFC硬件问题。后来不管了,我强制一个线程轮询:一发现串口关闭了,我就主动打开。
1.5 解决了1.4的问题,又代来新的问题,我程序都关了,线程还在跑。导致串口一直被占用。于是我在FormClosing事件中添加如下:程序一关,什么相关东西都关了。
搞定收工!
private void Form1_Closing(object sender, System.ComponentModel.CancelEventArgs e) { System.Environment.Exit(0); }
相关文章推荐
- WinForm程序中两份mdf文件问题的解决
- WinForm程序中两份mdf文件问题的解决_传智播客杨老师
- WinForm程序中两份mdf文件问题的解决
- WinForm程序中两份mdf文件问题的解决
- 解决WinForm 程序中由于拖拽导致MouseUp事件无法触发的问题
- WinForm程序中两份mdf文件问题的解决(转载 )
- nodejs爬虫程序暂时无法解决的乱码问题汇总
- Winform程序安装后打开出现程序停止运行问题解决方法
- 解决C# WinForm 中 VSHOST.EXE 程序不关闭的问题(转)
- vs2010 C++ win32控制台程序窗口闪退问题解决办法汇总
- WinForm程序中两份mdf文件问题的解决
- 解决C# WinForm 中 VSHOST.EXE 程序不关闭的问题
- WinForm程序中两份mdf文件问题的解决(转载 )
- WinForm程序中两份mdf文件问题的解决
- 水晶报表问题汇总(水晶报表的使用与查询条件生成报表、注册码、打印问题、模式使用示例、C#.Net的WinForm中的使用、程序发布与部署)
- WinForm程序中两份mdf文件问题的解决
- WinForm程序中两份mdf文件问题的解决
- Websharp框架 在Win2003环境下 WinForm程序无法调用WebService问题解决
- 使用DataDirectory---WinForm程序中两份mdf文件问题的解决
- 解决C# WinForm 中 VSHOST.EXE 程序不关闭的问题(转)