C# 只有在我第一次与SerialPort通信时出现错误,以后工作正常 我有一个USB设备(例如条形码扫描仪等) 我使用SerialPort与它通信(可以从VS2008的工具箱中很好地找到)

C# 只有在我第一次与SerialPort通信时出现错误,以后工作正常 我有一个USB设备(例如条形码扫描仪等) 我使用SerialPort与它通信(可以从VS2008的工具箱中很好地找到),c#,.net,visual-studio,serial-port,C#,.net,Visual Studio,Serial Port,我的问题是: 在第一次启动应用程序时启动电脑后,当它尝试向串行端口发送字符串时,它会挂起或卡住,或进入无响应模式 为了解决这个问题,我只需从电脑的USB端口上拔下USB电缆 我一卸下电缆,就会收到以下错误消息: 如果我按下Continue(继续)按钮,将卸下的USB电缆插回我的应用程序中,工作正常 注意:只有在启动或重新启动电脑后第一次启动应用程序时,我才会出现此错误。之后,它可以正常工作 注释< /强>:另一个要考虑的是,如果我把代码放在尝试和 catch < /代码> 只有当我从电脑上拔

我的问题是:

在第一次启动应用程序时启动电脑后,当它尝试向串行端口发送字符串时,它会挂起或卡住,或进入无响应模式

为了解决这个问题,我只需从电脑的USB端口上拔下USB电缆

我一卸下电缆,就会收到以下错误消息:

如果我按下Continue(继续)按钮,将卸下的USB电缆插回我的应用程序中,工作正常

注意:只有在启动或重新启动电脑后第一次启动应用程序时,我才会出现此错误。之后,它可以正常工作

<强>注释< /强>:另一个要考虑的是,如果我把代码放在<代码>尝试和<代码> catch < /代码> 只有当我从电脑上拔下USB电缆时,我才会捕捉到异常

编辑

重新启动电脑后,如果我这样做

  • 从电脑的USB端口插入USB电缆,然后
  • 我启动我的应用程序,然后它就可以正常工作了
  • 在我看来,在启动PC后的第一次尝试向串行端口发送字符串时,控件似乎进入了无限循环


    查看我的代码的详细信息。

    您必须在FormClose事件中关闭串行端口。因为,端口一旦打开应用程序并关闭应用程序端的端口

    这里90%的可能性是您正在尝试使用SerialPort解决常见的死锁情况。在DataReceived事件处理程序中使用Invoke()时,通常会被触发。如果在端口忙于接收数据时在主线程中使用Close(),则死锁很常见。在DataReceived事件处理程序完成运行之前,Close无法完成,Invoke()无法完成,因为主线程卡在Close调用中。拔出连接器是有效的,因为ThreadExceptionDialog会输出消息,从而允许调用完成

    一个简单的解决方法是改用BeginInvoke()。不调用Close也可以,当程序终止时,Windows会处理它。最好是通过某种方式控制关闭应用程序,这样就不会丢失serialport设备发送的任何内容