gpt4 book ai didi

c# - 如果之前接收到数据,SerialPort.Open() 会卡住系统(Compact Framework)

转载 作者:行者123 更新时间:2023-11-30 21:25:21 25 4
gpt4 key购买 nike

我这里有一个非常奇怪的问题,也许你们可以帮助我。我有一个 Windows CE 6 设备,它使用通过串行端口连接的条形码读卡器。我正在使用 Compact Framework (v2.0) SerialPort 类来处理这个问题,并且一切正常。

但是,有一个问题。如果在串行端口打开之前的任何时候刷卡,整个系统将卡住在 Open() 调用处。没有异常,没有警告,只是无缘无故地完全卡住系统。我尝试在打开端口之前清除缓冲区,但显然该方法只能在端口打开后使用,因为我得到了 InvalidOperationException

我做了一个简化版本的代码,看看复杂性是否与它有任何关系,但是带有打开端口的按钮的简单表单将以同样的方式卡住。这是简化的代码:

private void btConnect_Click(object sender, EventArgs e)
{
try
{
this.serialPort = new SerialPort(this.txName.Text, Convert.ToInt32(this.txBaud.Text));
this.serialPort.RtsEnable = this.chRTS.Checked;

this.serialPort.Open(); //it freezes here
this.btConnect.Text = "Disconnect";

this.txName.Enabled = false;
this.txBaud.Enabled = false;
this.chRTS.Enabled = false;
}
catch
{
MessageBox.Show("Failed to open port. Please check your settings and try again.", "Operation failed", MessageBoxButtons.OK, MessageBoxIcon.Hand, MessageBoxDefaultButton.Button1);
}
}

我看不出我做错了什么,我开始认为这是紧凑型框架中的一个错误。读卡器发送F03030DKD03003\r\n等数据包。有任何想法吗?提前致谢。

最佳答案

MS 提供的 SerialPort 类还有很多不足之处。您真正需要知道的是在 native 调用中卡住的确切位置。我的猜测是内部缓冲区中有数据,或者甚至可能设置了溢出,并且托管包装器对此感到厌烦。

我的建议是获取 OpenNETCF serial library ,它是免费的,并带有完整的源代码。它与 MS 提供的类接口(interface)兼容,它允许您将代码一直遍历到驱动程序调用以查看发生了什么。

关于c# - 如果之前接收到数据,SerialPort.Open() 会卡住系统(Compact Framework),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/702524/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com