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
}
}