c# - BlueScreen [Error : 0x0000003b / c0000005] 从 SerialPort 读取字节
问题描述
我在这里有一个 BarcodeScanner,我告诉它为我拍照。我将命令作为字节发送到扫描仪,等待响应,然后我尝试读取它。
如果我只是使用串行监视器并手动发送字节它工作得很好,我得到我的整个 jpeg 并且我很高兴。
如果我在 C# 中尝试它,我尝试用一种简单的方法读取字节(是我在谷歌上找到的面包和黄油方法。我使用的是正常的(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 个字节,所以是的,我的消息字符串那么长,所以它确实有效!只是简单地在它中间崩溃。
扫描仪不是问题,因为我长时间使用扫描仪。我可以来回发送数据。我还在制造商交给我的演示程序上对其进行了测试,因此它确实有效。
有任何想法吗?也许我只是不知道如何读取字节。
谢谢您的帮助
解决方案
您设置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
}
}
推荐阅读
- javascript - 表单提交时页面重新加载,getElementById 返回 null,表单不工作
- java - 打印/导出 bootstable 数据表中的选定列
- ruby-on-rails - 在 Rails 上设计可重复确认的电子邮件
- python - 在 DataFrame 中对值进行分组
- microsoft-teams - 无法在团队范围内保存自定义应用程序选项卡
- java - 如何使用 Java SDK 使 Cloudfront 中的缓存无效
- javascript - 将类和函数分配给变量有什么意义?
- r - 识别当前在 EBImage shiny-display 中显示的帧
- swift - Swift 5:在“self.init”调用之前使用“self”
- docker - 未为 ABI0 定义重定位目标 runtime.entersyscallblock