포트를 열면 처리기가 추가되어 작동합니다.
나는 어떤 시점에서 .. 또 다른 서브 루틴에 처리기를 변경하는 것입니다 필요가있는 무엇
내가 무슨 짓을했다 :Serialport : DatareceivedHandler 변경
AddHandler serport.DataReceived, AddressOf handler1
그리고 첫 번째 핸들러는 몇 시간 후 ... 예상대로
근무 코드 :
RemoveHandler serport.DataReceived, AddressOf handler1
AddHandler serport.DataReceived, AddressOf handler2
하지만 두 번째 처리기가 작동하지 않습니다. 절대로 불리지 않는다.
어떻게해야합니까?
:
Public Function OpenSerial(ByRef serialport As String, ByVal receivehandler As SerialDataReceivedEventHandler) As SerialPort
Dim ser As SerialPort
ser = New System.IO.Ports.SerialPort(serialport, 115200, Parity.None, 8, StopBits.One)
With ser
.Handshake = Handshake.None
.ReadBufferSize = 10000
.ReadTimeout = 500
.WriteBufferSize = 10000
.WriteTimeout = 500
.RtsEnable = True
.DtrEnable = True
AddHandler .DataReceived, receivehandler
AddHandler .ErrorReceived, AddressOf sErrorHandler
.Encoding = System.Text.Encoding.Default
.Open()
.DiscardOutBuffer()
End With
OpenSerial = ser
End Function
그래서 나는이 방법을 사용할 수 있다고 생각
: 그러나 나는 그것을 어쨌든Dim comSerial As SerialPort
comSerial = OpenSerial("COM1", AddressOf Handler1)
를, 나는 같은 얻을 결과 : 첫 번째 처리기가 작동하면 다시 정의 할 때 포트를 닫았다가 다시 열어도 두 번째 처리기는 결코
을 호출하지 않습니다. (
응용 프로그램에 대한 설명은 사용자가하려는 일을 파악하는 데 도움이됩니다. 내가 알아 차리는 한 가지는 핸드 쉐이크가 없으면 RTS를 켤 수 있다는 것입니다. 한스 (Hans)가 말했듯이, 부울을 사용하면 처리기가 두 가지 다른 작업을 수행하게됩니다. – dbasnett