BlueScreen[Ошибка: 0x0000003b / c0000005] Чтение байтов из SerialPort

У меня есть сканер штрих-кода, который я говорю, чтобы сделать для меня картинку. Я отправляю команду сканеру в виде байта, жду ответа, а затем пытаюсь его прочитать.

Если я просто использую последовательный монитор и отправляю байты вручную, он работает нормально, я получаю весь свой jpeg и я счастлив.

если я попробую его на C#, я попытаюсь прочитать байты простым методом (это был метод хлеба с маслом, который я нашел в Google. Я использовал нормальный (serialport.ReadExisting(), который вылетает таким же образом).

вот и все событие:

 public void serial_datareceived(object sender, SerialDataReceivedEventArgs e)
        {
            try
            {
                usescanner = (SerialPort)sender;
                if (sender is SerialPort)
                {
                    string port = ((SerialPort)sender).PortName;
                    int count = ((SerialPort)sender).BytesToRead;
                    int returnAscii = 0;
                    string message = "";
                    while (count > 0)
                    {
                        returnAscii = ((SerialPort)sender).ReadByte();
                        message = message + Convert.ToChar(returnAscii);
                        count--;
                    }
                    ScanPort sport = new ScanPort(port, true);
                    scanner.ScannerPort = sport;
                }

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

Я всегда получаю 4096 байт для чтения. а затем я могу читать примерно до 70-90 байт, так что да, моя строка сообщений такая длинная, поэтому она работает! просто вылетает посреди этого.

сканер не проблема, так как я работаю со сканером долгое время. и я могу отправлять данные туда и обратно. также я протестировал его на демонстрационной программе, которую мне передал производитель, так что она действительно работает.

есть идеи? может я просто не умею читать байты.

Спасибо за помощь

1 ответ

Ты устанавливаешь usescanner как ваш SerialPort, но затем вы продолжаете звонить ((SerialPort)sender) по всему коду и не ссылайтесь usescanner. Какой смысл ставить?

В любом случае, вы должны просто настроить очень простой пример и посмотреть, сможете ли вы получить ошибку. Иногда, когда вы добавляете слишком много сложного кода, трудно найти проблему. Я рекомендую пойти просто, чтобы доказать, что проблема, а не в вашем коде. Создайте новую форму с кнопкой открытия и кнопкой закрытия.

public partial class Form2 : Form
{
    SerialPort sp;

    public Form2()
    {
        InitializeComponent();
    }

    private void buttonOpen_Click(object sender, EventArgs e)
    {
        sp = new SerialPort("COM1", 9600);  //initialize our serial port
        sp.DataReceived += new SerialDataReceivedEventHandler(sp_DataReceived); //create our data received event
        sp.Open(); //Open the port
    }

    void sp_DataReceived(object sender, SerialDataReceivedEventArgs e)
    {
        string Data = sp.ReadExisting();

        Console.Write(Data);
    }

    private void buttonClose_Click(object sender, EventArgs e)
    {
        sp.Close(); //close the port
    }
}
Другие вопросы по тегам