@@ -64,12 +64,14 @@ public partial class SerialPort : Component
64
64
private char [ ] _singleCharBuffer ;
65
65
66
66
public event SerialErrorReceivedEventHandler ErrorReceived ;
67
- public event SerialPinChangedEventHandler PinChanged ;
68
67
69
- // handler for the underlying stream
68
+ // handlers for the underlying stream
70
69
private readonly SerialDataReceivedEventHandler _dataReceivedHandler ;
70
+ private readonly SerialPinChangedEventHandler _pinChangedHandler ;
71
71
72
72
private SerialDataReceivedEventHandler _dataReceived ;
73
+ private SerialPinChangedEventHandler _pinChanged ;
74
+
73
75
public event SerialDataReceivedEventHandler DataReceived
74
76
{
75
77
add
@@ -99,6 +101,35 @@ public event SerialDataReceivedEventHandler DataReceived
99
101
}
100
102
}
101
103
104
+ public event SerialPinChangedEventHandler PinChanged
105
+ {
106
+ add
107
+ {
108
+ bool wasNull = _pinChanged == null ;
109
+ _pinChanged += value ;
110
+
111
+ if ( wasNull )
112
+ {
113
+ if ( _internalSerialStream != null )
114
+ {
115
+ _internalSerialStream . PinChanged += _pinChangedHandler ;
116
+ }
117
+ }
118
+ }
119
+ remove
120
+ {
121
+ _pinChanged -= value ;
122
+
123
+ if ( _pinChanged == null )
124
+ {
125
+ if ( _internalSerialStream != null )
126
+ {
127
+ _internalSerialStream . PinChanged -= _pinChangedHandler ;
128
+ }
129
+ }
130
+ }
131
+ }
132
+
102
133
//--- component properties---------------*
103
134
104
135
// ---- SECTION: public properties --------------*
@@ -511,6 +542,7 @@ public int WriteTimeout
511
542
public SerialPort ( )
512
543
{
513
544
_dataReceivedHandler = new SerialDataReceivedEventHandler ( CatchReceivedEvents ) ;
545
+ _pinChangedHandler = CatchPinChangedEvents ;
514
546
}
515
547
516
548
public SerialPort ( IContainer container ) : this ( )
@@ -563,6 +595,7 @@ protected override void Dispose(bool disposing)
563
595
if ( IsOpen )
564
596
{
565
597
_internalSerialStream . DataReceived -= _dataReceivedHandler ;
598
+ _internalSerialStream . PinChanged -= _pinChangedHandler ;
566
599
_internalSerialStream . Flush ( ) ;
567
600
_internalSerialStream . Close ( ) ;
568
601
_internalSerialStream = null ;
@@ -601,7 +634,11 @@ public void Open()
601
634
_internalSerialStream . SetBufferSizes ( _readBufferSize , _writeBufferSize ) ;
602
635
603
636
_internalSerialStream . ErrorReceived += new SerialErrorReceivedEventHandler ( CatchErrorEvents ) ;
604
- _internalSerialStream . PinChanged += new SerialPinChangedEventHandler ( CatchPinChangedEvents ) ;
637
+
638
+ if ( _pinChanged != null )
639
+ {
640
+ _internalSerialStream . PinChanged += _pinChangedHandler ;
641
+ }
605
642
606
643
if ( _dataReceived != null )
607
644
{
@@ -1213,7 +1250,7 @@ private void CatchErrorEvents(object src, SerialErrorReceivedEventArgs e)
1213
1250
1214
1251
private void CatchPinChangedEvents ( object src , SerialPinChangedEventArgs e )
1215
1252
{
1216
- SerialPinChangedEventHandler eventHandler = PinChanged ;
1253
+ SerialPinChangedEventHandler eventHandler = _pinChanged ;
1217
1254
SerialStream stream = _internalSerialStream ;
1218
1255
1219
1256
if ( ( eventHandler != null ) && ( stream != null ) )
0 commit comments