无法使用c#读取条形码或获取未知字符

时间:2016-09-26 09:44:22

标签: c# barcode barcode-scanner

我收到错误

  

System.TimeoutException was unhandled The operation has timed out... etc

当我试图阅读条形码时,我试了很多东西来解决它,但没有成功。

我检查了多次与Windows设备管理器匹配的SerialPort参数。

我试图替换

String data = _serialPort.ReadLine(); 

String data = _serialPort.ReadByte().ToString(); 

你可以看到,但是这显示了我显示的未知数字,例如12然后删除了26等。

我尝试更改编码,但是当我更改编码时,我会收到未知字符,例如空方块黑色三角形或扑克牌符号等。

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    static SerialPort _serialPort;
    private delegate void SetTextDeleg(string text);

    private void Form1_Load(Object sender, EventArgs e)
    {
        _serialPort = new SerialPort("COM4", 9600, Parity.None, 8, StopBits.One);
        _serialPort.Handshake = Handshake.None;
        _serialPort.DataReceived += new SerialDataReceivedEventHandler(sp_DataReceived);
        _serialPort.ReadTimeout = 500;
        _serialPort.WriteTimeout = 500;
        // Encoding
        //_serialPort.Encoding = Encoding.ASCII;
        _serialPort.Encoding = Encoding.Default;

        _serialPort.Open();
    }

    private void btnStart_Click(Object sender, EventArgs e)
    {
        try
        {
            if (!_serialPort.IsOpen)
                _serialPort.Open();

            _serialPort.Write("SI\r\n");
        }
        catch (Exception ex)
        {
            MessageBox.Show("Error opening/writing to serial port :: " + ex.Message, "Error!");
        }
    }

    void sp_DataReceived(object sender, SerialDataReceivedEventArgs e)
    {
        Thread.Sleep(2000);
        String data = _serialPort.ReadLine();
        //String data = _serialPort.ReadByte().ToString();
        this.BeginInvoke(new SetTextDeleg(si_DataReceived), new Object[] { data });
    }

    private void si_DataReceived(String data)
    {
        textBox1.Text = data.Trim().ToString();
        //textBox1.Text = data;
        //label1.Text = data;
    }
}

1 个答案:

答案 0 :(得分:0)

这个怎么样?

void sp_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
    SerialPort spL = (SerialPort) sender;
    byte[] buf = new byte[spL.BytesToRead];
    spL.Read(buf, 0, buf.Length);
    string data = System.Text.Encoding.Default.GetString(buf);
}
相关问题