请教:C#蓝牙扫描枪编程

ztlover 2010-06-03 11:17:10
有一个蓝牙扫描枪,与电脑建立蓝牙连接后,希望扫描枪扫描的时候将条形码读到输入焦点的文版本框中,编程如何实现呢?
下面是我的实现方式,但是没有办法获取到扫描枪扫描的条形码,
代码说明:
1、cboxComin为选择输入端口的Combox控件,cboxComout为选择输出端口的Combox控件
2、lboxBarcode为ListView控件,用来显示扫描的条形码


public partial class frmBluetooth : Form
{
SerialPort serialIn;
SerialPort serialOut;

Thread rcvThread;
bool disconnectRequested = false;



public frmBluetooth()
{
InitializeComponent();
}

private void frmBluetooth_Load(object sender, EventArgs e)
{
string[] ports = SerialPort.GetPortNames();

for (int i = 0; i < ports.Length; i++)
{
cboxComin.Items.Add(ports[i]);
cboxComout.Items.Add(ports[i]);
}
}

private void btnConnect_Click(object sender, EventArgs e)
{
serialIn = new SerialPort(this.cboxComin.SelectedItem.ToString());
serialIn.ReadTimeout = 3000;
serialOut = new SerialPort(this.cboxComout.SelectedItem.ToString());
serialOut.ReadTimeout = 3000;
try
{
if (!serialIn.IsOpen)
{
serialIn.Open();
}

if (!serialOut.IsOpen)
{
serialOut.Open();
}

rcvThread = new Thread(new ThreadStart(ReceiveData));

rcvThread.Start();

}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}

}

private void ReceiveData()
{
while (!disconnectRequested)
{
try
{
string line = serialIn.ReadLine();
if (line.CompareTo("quit$$$") == 0)
{
disconnectRequested = true;
continue;
}
if (!string.IsNullOrEmpty(line))
{
this.lboxBarcode.Items.Add(line);
}
}
catch
{ }

}
if (disconnectRequested)
{
serialIn.Close();
serialOut.Close();
}

}

private void btnDisconnect_Click(object sender, EventArgs e)
{
try
{
disconnectRequested = true;
serialOut.WriteLine("quit$$$");
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
...全文
812 17 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
yesicoo2 2011-09-25
  • 打赏
  • 举报
回复
关注下
飞天凤凰601 2010-06-22
  • 打赏
  • 举报
回复
用委托,,
ztlover 2010-06-03
  • 打赏
  • 举报
回复
ReceiveData方法中不断的循环读取端口的输入,但是获取不到数据,catch中捕获异常:操作超时;
连接时执行: serialIn.Open();
后,蓝牙适配器上的指示灯显示已连接。但是还是没有办法获取到数据

不知道我采用这种方法获取扫描枪读取的条形码思路是否正确呢?
HolyPlace 2010-06-03
  • 打赏
  • 举报
回复
调试跟踪,看值获得了没有。
lmj_yes 2010-06-03
  • 打赏
  • 举报
回复
学习中~~~
Lucky_6Q 2010-06-03
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 gsq_0912 的回复:]
顶,这个技术好!
[/Quote]顶
jsmouse 2010-06-03
  • 打赏
  • 举报
回复
来接分
-小蕾- 2010-06-03
  • 打赏
  • 举报
回复
先跟踪一下,看看读到数据没有,看看抛出的是什么异常?
gsq_0912 2010-06-03
  • 打赏
  • 举报
回复
顶,这个技术好!
ztlover 2010-06-03
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 computerfox 的回复:]
ReceiveData会被执行吗,也就是说,底层接收到数据没?
[/Quote]

谢谢!
执行是可以执行的,但是string line = serialIn.ReadLine();
时候会抛出异常,超时,也就是没有读取到数据!
捷哥1999 2010-06-03
  • 打赏
  • 举报
回复
ReceiveData会被执行吗,也就是说,底层接收到数据没?
铛铛 2010-06-03
  • 打赏
  • 举报
回复
太高端了
帮顶吧
liuh6 2010-06-03
  • 打赏
  • 举报
回复
你只是开启一个线程但没有看到你对这个端口的监听!不管什么样的设备我们需要做的就是对一个SerialPort进行监听。收到数据后对数据后去做处理..以前做串口与U口的扫描设备,有的设备是带SDK的..如硬件提供了SDK别的工作就不用作了.看懂他们的DEMO就行了..



rcvThread = new Thread(new ThreadStart(ReceiveData));
换成:

serialIn.DataReceived+=new SerialDataReceivedEventHandler(dataReceived);
serialOut.DataReceived+=new SerialDataReceivedEventHandler(dataReceived);
b3366450 2010-06-03
  • 打赏
  • 举报
回复
呵呵 蛮有意思的 学习下!
ztlover 2010-06-03
  • 打赏
  • 举报
回复
谢谢大家,现在已经能获取到数据了!不使用多线程检测端口,而是使用

private void btnConnect_Click(object sender, EventArgs e)
{
serialIn = new SerialPort(this.cboxComin.SelectedItem.ToString());
serialIn.ReadTimeout = 3000;
serialOut = new SerialPort(this.cboxComout.SelectedItem.ToString());
serialOut.ReadTimeout = 3000;
try
{
if (!serialIn.IsOpen)
{
serialIn.Open();
serialIn.DataReceived += new SerialDataReceivedEventHandler(serialIn_DataReceived);
}

if (!serialOut.IsOpen)
{
serialOut.Open();
}



}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}

}
slassddd 2010-06-03
  • 打赏
  • 举报
回复
接口没取错吧

111,088

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧