C#串行端口写入超时

C#串行端口写入超时,c#,serial-port,C#,Serial Port,我正在尝试使用C#中的VCP(USB全速)每1ms发送一次串行数据 发送几分钟后,发送串行数据时出错。正在抱怨写入超时,从现在起我将无法再发送数据,例外情况如下: System.TimeoutException: The write timed out. 我试图关闭并重新打开端口,但它仍然抱怨写入超时 解决此问题的唯一方法是拔下/重新插入USB 我可以知道如何在C#中解决这个写超时问题吗?(我猜USB主机控制器卡在忙状态) 我的串行端口代码设置如下: _port.WriteBufferSize

我正在尝试使用C#中的VCP(USB全速)每1ms发送一次串行数据

发送几分钟后,发送串行数据时出错。正在抱怨写入超时,从现在起我将无法再发送数据,例外情况如下:

System.TimeoutException: The write timed out.
我试图关闭并重新打开端口,但它仍然抱怨写入超时

解决此问题的唯一方法是拔下/重新插入USB

我可以知道如何在C#中解决这个写超时问题吗?(我猜USB主机控制器卡在忙状态)

我的串行端口代码设置如下:

_port.WriteBufferSize = 1024;
_port.ReadBufferSize = 1024;
_port.ReadTimeout = 1;
_port.ReceivedBytesThreshold = 1;
_port.WriteTimeout = 16;
_port.Handshake = Handshake.RequestToSend;
_port.DtrEnable = true;
_port.RtsEnable = true;    
更新:

下面是截图,取自Eltimata USB Analyzer,您可以看到在串行端口写入超时时,它成功发送了0个字节


知道为什么会发生超时吗?它太小了,比操作系统的线程调度量少了3倍。不要低于一秒钟。ReadTimeout也是错误的,但是DataReceived事件处理程序可能使您免于麻烦。请注意,它并不总是这样做,每个人都会忘记检查e.EventType。@HansPassant有一次,我有写入超时,我只是通过单击windows窗体通过VCP发送任何数据,它会抱怨写入超时,在我拔下uSB之前无法清除此问题。@PaulSasik我相信这会在uSB主机控制器忙时发生,因为它是FS,它在1ms的时间范围内工作,或者发送/写入,并且因为我已经安排它每1ms发送一次,如果我现在收到任何数据,它将导致写入超时。一旦第一个异常写入超时抛出,我就不能再发送任何数据了,但我仍然可以接收数据。即使我试图通过点击表单发送数据,它也会抛出一个异常,@HansPassant关于e.EventType我应该检查什么?你能详细说明一下吗?