简单的问题。 .NET SerialPort
类具有以下用于获取串行输入行的属性:
CDHolding
- 获取端口的Carrier Detect行的状态。CtsHolding
- 获取Clear-to-Send行的状态。DsrHolding
- 获取数据集就绪(DSR)信号的状态。注意RIHolding
缺失。
此外,它还有PinChanged
个事件。这提供了SerialPinChange
枚举值,其中包含以下成员,包含一个用于Ring:
CtsChanged
- 清除发送(CTS)信号已更改状态... DsrChanged
- 数据集就绪(DSR)信号已更改状态... CDChanged
- 载波检测(CD)信号已更改状态... Ring
- 检测到响铃指示符。Break
- 输入时检测到中断。所以我的问题是,为什么没有RIHolding
属性?
如果我们查看内部SerialStream
课程,我们会看到CDHolding
,CtsHolding
和DsrHolding
都是通过调用Win32 {{3}来实现的。功能。他的lpModemStat
输出值是以下之一:
MS_CTS_ON
0x0010
CTS(清除发送)信号已开启。MS_DSR_ON
0x0020
DSR(数据集准备就绪)信号已开启。MS_RING_ON
0x0040
铃声指示灯亮起。MS_RLSD_ON
0x0080
RLSD(接收线路信号检测)信号已开启。 (这映射到CDHolding
) 所以,似乎添加一个只看第6位的RIHolding
属性是微不足道的。为什么会遗漏这个?
答案 0 :(得分:3)
由于振铃信号的节奏,它本质上是一个瞬态信号。如果它打开那么它将不会持续很长时间。例如,在美国2秒,在英国400毫秒。因此,信号状态并不意味着很多,它取决于时间,更糟糕的是,当你真的不走运的时候,你总是会注意到它。当它打开时你最好抓住它,因此PinChanged会报告它。