using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO.Ports;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace Honeywell1900扫码枪程序触发
{
public partial class Form1 : Form
{
SerialPort serialPort1 = new SerialPort();
delegate void myDelegate(); //委托,此为重点.
public Form1()
{
InitializeComponent();
}
private void button3_Click(object sender, EventArgs e)
{
serialPort1 = new SerialPort();
serialPort1.PortName = comboBox1.Text;
try
{
serialPort1.Open();
serialPort1.DataReceived += new System.IO.Ports.SerialDataReceivedEventHandler(serialPort1_DataReceived);
}
catch (Exception ex)
{
label3.ForeColor = Color.Red;
label3.Text = "打开串口出错";
//MessageBox.Show("打开串口出错");
}
label3.ForeColor = Color.Green;
label3.Text = "串口已打开";
}
private void button4_Click(object sender, EventArgs e)
{
if (serialPort1.IsOpen)
{
serialPort1.Close();
label3.ForeColor = Color.Green;
label3.Text = "关闭串口成功";
return;
}
label3.ForeColor = Color.Black;
label3.Text = "关闭串口成功";
}
private void button1_Click(object sender, EventArgs e)
{
Byte[] BSendTemp = HexStringToBytes("16 54 0D");
serialPort1.Write(BSendTemp,0,BSendTemp.Length);//发送数据
}
private void button2_Click(object sender, EventArgs e)
{
Byte[] BSendTemp = HexStringToBytes("16 55 0D");
this.serialPort1.Write(BSendTemp, 0, BSendTemp.Length);//发送数据
}
private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
textBox1.BeginInvoke(new myDelegate(updateTextBox));
}
public void updateTextBox()
{
int len = serialPort1.BytesToRead;
byte[] sbytes = new byte[len];
serialPort1.Read(sbytes, 0, len);
textBox1.Text = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.000")+"扫到码如下:\r\n"+Encoding.UTF8.GetString(sbytes);
}
public static byte[] HexStringToBytes(string hs)
{
string[] strArr = hs.Trim().Split(' ');
byte[] b = new byte[strArr.Length];
//逐个字符变为16进制字节数据
for (int i = 0; i < strArr.Length; i++)
{
b[i] = Convert.ToByte(strArr[i], 16);
}
//按照指定编码将字节数组变为字符串
return b;
}
private string receive_data = "";
private void button6_Click(object sender, EventArgs e)
{
receive_data = "34";
}
private void button5_Click(object sender, EventArgs e)
{
Task.Factory.StartNew(()=> {
bool ret = TimeoutGetValue(ref receive_data, 4000);
if (ret)
{
System.Diagnostics.Trace.WriteLine(ret+ receive_data);
receive_data = "";
}
else
{
System.Diagnostics.Trace.WriteLine("获取超时");
}
});
}
///
/// 用来获取data变量的值,并设置超时时间
///
/// ref 传递变量
/// 超时时间
///
private bool TimeoutGetValue(ref string data,int timeout)
{
int i_count = 0;
int all_count = timeout / 200;
while (data.Equals("") && i_count