昨天想试试霍尼韦尔的扫码枪,扫码枪有两种模式,键盘模式和串口模式,

1、键盘模式直接插上就行了,就像一个键盘一样不需要任何驱动,扫出来的数据直接落到PC的输入焦点上。就像一个键盘一样,只能输入字符。

2、而串口模式,则是安装驱动以后,能够虚拟成一个COM口,

如果我们用扫码枪给应用程序输入数据的时候肯定是不行的,因为程序需要能够在后台运行的时候也能用扫码枪作为数据输入的。这就需要用串口模式了。

今天我写程序的时候,问题是怎么也不能触发,DataReceived事件,最后发现问题所在,几个要点

1、串口必须New新实例,必须和能够正确获取硬件串口的名称。

2、sp.ReceivedBytesThreshold = 1; 这个是默认值就是1,就是有一个字节的数据就触发事件。

3、sp.RtsEnable = true;sp.DtrEnable = true;这两个属性必须得正确设置,哈

我就是因为第3个原因一直不不能正确触发事件。记得添加事件绑定代码啊。

public partial class Form1 : Form
{
SerialPort sp;
bool bIsReading = false;
// Dynamic d = new Dynamic();

public Form1()
{
InitializeComponent();
}

private void button1_Click(object sender, EventArgs e)
{
bool b = false;
try
{
sp = new SerialPort();
sp.BaudRate = 115200;
sp.DataBits = 8;
sp.Parity = Parity.None;
sp.StopBits = StopBits.One;
sp.PortName = System.IO.Ports.SerialPort.GetPortNames()[0];

sp.RtsEnable = true;
sp.DtrEnable = true;
sp.ReadTimeout = 3000;
sp.ReceivedBytesThreshold = 1;
sp.DataReceived += new System.IO.Ports.SerialDataReceivedEventHandler(this.sp_DataReceived_1);
// sp.DataReceived += Sp_DataReceived;
// sp.DataReceived -= Sp_DataReceived;
sp.Open();

}
catch (Exception xe)
{
b = true;
MessageBox.Show("异常:" + xe.Message);

}
finally {
if (sp != null && b == true)
{
if (sp.IsOpen)
{
sp.Close();

} else
{
sp = null;
}

}

b = false;
}

}

private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{

//sp.DiscardInBuffer();
if (sp != null)
{
sp.Close();
sp.Dispose();
}
}

private void sp_DataReceived_1(object sender, SerialDataReceivedEventArgs e)
{

if (bIsReading == true)
return;
bIsReading = true;
try
{
StringBuilder currentline = new StringBuilder();
//循环接收数据
while (sp.BytesToRead > 0)
{
char ch = (char)sp.ReadByte();
currentline.Append(ch);
}
//在这里对接收到的数据进行处理
MessageBox.Show("数据为:" + currentline.ToString());

//GlobalPublic.BasePublic.ShowMessage("数据为:" + currentline.ToString(), (BaseFrm as BaseForm.FrmBaseDoc).MTC_oGlobal);
//InvokeDelegate del = new InvokeDelegate(setItem);
//this.BeginInvoke(del, currentline.ToString());
//setItem(currentline.ToString());
// currentline = new StringBuilder();
}
catch (Exception ex)
{
MessageBox.Show("异常:" + ex.Message);
}
finally
{
bIsReading = false;
}
}
}
}

C# serialPort的DataReceived事件无法触发 ,用的霍尼韦尔的扫码枪并且装了相应的USB转串口驱动。的更多相关文章

  1. 彻底解决低端安卓手机touchend事件不触发(考虑scroll)

    本次移动端开发时遇见了安卓4.2系统不能触发touchend的问题,有以下需求. 1. 横滑轮播图 2.下拉刷新页面内容 3.body滚动条不能失效 开始在轮播图touchmove事件中阻止了浏览器默 ...

  2. Win7/Win8/Win8.1/Win10下的DragEnter DragDrop事件不触发

    Win7/Win8/Win8.1/Win10下的DragDrop事件不触发 2011-02-02  来自:博客园  字体大小:[大 中 小] 摘要:你的应用程序需要从windows资源管理器拖动文件到 ...

  3. 如何禁用事件的浮升(div的子元素的点击事件会触发父元素的点击事件)

    <div onclick="alert();"> <div onclick="alert();"></div> </d ...

  4. 如何用按钮的click事件去触发a标签的click事件

    在jQquery中,可以用如下方式触发input.a标签的click事件: <input id="my_input" /> <a id="my_a&qu ...

  5. 安卓手机的touchend事件不触发问题

    问题描述 $(document).on("touchstart touchmove",".btn-highlight",function(event){ $(t ...

  6. C#-gdi绘图,双缓冲绘图,Paint事件的触发

    一. 画面闪烁问题与双缓冲技术 1.1 导致画面闪烁的关键原因分析: 1  绘制窗口由于大小位置状态改变进行重绘操作时 绘图窗口内容或大小每改变一次,都要调用Paint事件进行重绘操作,该操作会使画面 ...

  7. Win7下的DragEnter、DragDrop事件不触发的解决方案

    Win7与原来的XP和Win2003相比,安全控制方面更严格.比如,当我们以administrator登陆XP或Win2003时,运行所有的程序即是以管理员的身份启动的.但当以administrato ...

  8. iphone上click事件不触发的问题解决。

    iphone上click事件不触发的问题解决. //在ID为jsProvince上有这么一个事件: $('body').on('click', '#jsProvince', function(e){ ...

  9. iOS中UITableView的cell点击事件不触发didSelectRowAtIndexPath(汇总)

    iOS中UITableView的cell点击事件不触发didSelectRowAtIndexPath 首先分析有几种原因,以及相应的解决方法 1.UITableViewCell的userInterac ...

随机推荐

  1. net 把指定 URI 的资源下载到本地

    DirectoryInfo dir = new DirectoryInfo(AppContext.BaseDirectory); var path = dir.FullName + @"te ...

  2. Aspose Word.Dll库自带的bug导致The document appears to be corrupted and cannot be loaded 问题处理。

    问题的详细描述: C#在开发过程中使用Aspose.word.dll库去实现word套打功能.但是,最近客户反映出现了一个问题,在打印文档的时候,系统报错.经过定位分析发现是Aspose.word.d ...

  3. vs2017使用rdlc实现批量打印

    接着上一篇:上一篇写了安装,这篇直接搞定批量打印,A4纸横版竖版页面设计,正式开始.(我的表达不怎么好,我尽量发图片都是程序员一点就通) 一.界面展示 忽略界面设计丑 查看预览界面,因为有数据就不截全 ...

  4. python--Websocket实现, 加密 sha1,base64

    需要用到gevent-websocket包,这里我们用下图这个 一.websocket简单实现 ep1.py from geventwebsocket.handler import WebSocket ...

  5. MariaDB 数据库系统概述(1)

    MariaDB数据库管理系统是MySQL的一个分支,主要由开源社区在维护,采用GPL授权许可MariaDB的目的是完全兼容MySQL,包括API和命令行,MySQL由于现在闭源了,而能轻松成为MySQ ...

  6. jspm 简介

    借鉴:http://www.jianshu.com/p/4aba847b3e8c 功能 1. 支持加载JavaScript各种模块化的写法:AMD.CommonJS.标准化的ES6模块... 2. 包 ...

  7. c++11中关于std::thread的join的思考

    c++中关于std::thread的join的思考 std::thread是c++11新引入的线程标准库,通过其可以方便的编写与平台无关的多线程程序,虽然对比针对平台来定制化多线程库会使性能达到最大, ...

  8. POJ 2726

    #include <iostream> #include <algorithm> #define MAXN 10005 using namespace std; struct ...

  9. oracle RAC srvctl命令关闭节点实例的时候 不能正常执行

    场景描述: [oracle@oracle01 admin]$ srvctl stop database -d oradb1 PRCD- : The resource for database ORAD ...

  10. Postman入门