蓝屏[错误: 0x0000003b / c0000005] 从串行端口读取字节



我这里有一个条形码扫描仪,我告诉我为我做一张照片。 我以字节形式向扫描仪发送命令,等待响应,然后尝试读取它。

如果我只是使用串行监视器并手动发送字节,它可以正常工作,我得到了我的整个 JPEG 并且我很高兴。

如果我在 C# 中尝试它,我会尝试使用一个简单的方法读取字节(是我在 Google 上找到的面包和黄油方法。 我使用的正常方法(串行端口。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 字节,所以是的,我的消息字符串那么长,所以它确实有效! 只是简单地在中间崩溃。

扫描仪不是问题,因为我长时间使用扫描仪。 我可以来回发送数据。 我还在制造商交给我的演示程序上对其进行了测试,因此它可以工作。

有什么想法吗?也许我只是不知道如何读取字节。

感谢您的帮助

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

最新更新