为什么 SerialPort 类没有 RIHolding 属性?

Jon*_*art 4 .net api-design serial-port

简单的问题。.NETSerialPort类具有以下用于获取串行输入行的属性:

  • CDHolding- 获取端口的载波检测线路的状态。
  • CtsHolding- 获取清除发送线路的状态。
  • DsrHolding- 获取数据集就绪 (DSR) 信号的状态。

注释RIHolding丢失。

此外,它还有一个PinChanged事件。它提供了一个SerialPinChange枚举值,该值具有以下成员,并且确实包含一个用于 Ring 的成员:

  • CtsChanged- 清除发送 (CTS) 信号改变状态...
  • DsrChanged-数据集就绪 (DSR) 信号状态更改...
  • CDChanged- 载波检测 (CD) 信号状态发生变化...
  • Ring- 检测到环形指示器。
  • Break- 检测到输入中断。

所以我的问题是,为什么没有财产RIHolding


如果我们查看内部SerialStream类,我们会发现CDHoldingCtsHolding、 和DsrHolding都是通过调用 Win32GetCommModemStatus函数来实现的。他的lpModemStat输出值为以下之一:

  • MS_CTS_ON 0x0010CTS(清除发送)信号已打开。
  • MS_DSR_ON 0x0020DSR(数据设置就绪)信号打开。
  • MS_RING_ON 0x0040响铃指示灯信号亮起。
  • MS_RLSD_ON 0x0080RLSD(接收线信号检测)信号打开。(这映射到CDHolding

因此,添加一个仅查看第 6 位的属性似乎是微不足道的。RIHolding为什么要忽略此属性?

Han*_*ant 5

由于振铃信号节奏,它本质上是瞬态信号。如果它打开了,那么它不会持续很长时间。例如,美国为 2 秒,英国为 400 毫秒。因此,信号的状态并没有多大意义,它取决于时间,最糟糕的情况是,当你真的很不幸时,你总是会观察到它。您最好在它打开时捕获它,这样 PinChanged 就会报告它。

  • 但如果你想在 GUI 中展示它,例如,400 毫秒就足够了。 (2认同)
  • 感谢您对*为什么*它被遗漏的解释。不过,这并没有让我感到更高兴:-) (2认同)