有一个蓝牙扫描枪,与电脑建立蓝牙连接后,希望扫描枪扫描的时候将条形码读到输入焦点的文版本框中,编程如何实现呢?
下面是我的实现方式,但是没有办法获取到扫描枪扫描的条形码,
代码说明:
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);
}
}
下面是我的实现方式,但是没有办法获取到扫描枪扫描的条形码,
代码说明:
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);
}
}
谢谢!
执行是可以执行的,但是string line = serialIn.ReadLine();
时候会抛出异常,超时,也就是没有读取到数据!
连接时执行: serialIn.Open();
后,蓝牙适配器上的指示灯显示已连接。但是还是没有办法获取到数据不知道我采用这种方法获取扫描枪读取的条形码思路是否正确呢?
{
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);
} }
把
rcvThread = new Thread(new ThreadStart(ReceiveData));
换成:serialIn.DataReceived+=new SerialDataReceivedEventHandler(dataReceived);
serialOut.DataReceived+=new SerialDataReceivedEventHandler(dataReceived);