serialport DataReceivedイベント
3620 ワード
serialport DataReceivedイベント、デフォルトはbyteを受信するとイベントがトリガーされます.
例えば、実際に返されるデータは*IDN?です.トリガの回数は毎回違います
DataReceivedイベントの処理は、本質的に受信データをスレッドで処理する.
SerialPortクラスは、関数の終了後にローカル変数が解放されるため、ローカル変数として定義しないでください.スレッドはまだ終了していないし、ポートはまだ解放されていない.次の2つの異常が発生します
または
lock (thisLock)
{
int len = sp.BytesToRead;
if (len > 0)
{
Byte[] data = new Byte[len];
try
{
sp.Read(data, 0, len);
}
catch (System.Exception)
{
}
SerialPortEventArgs args = new SerialPortEventArgs();
args.receivedBytes = data;
Debug.WriteLine("**** port1_DataReceived=" + Encoding.Default.GetString(data));
if (comReceiveDataEvent != null)
{
comReceiveDataEvent.Invoke(this, args);
}
}
}
例えば、実際に返されるデータは*IDN?です.トリガの回数は毎回違います
**** port1_DataReceived=*
**** port1_DataReceived=IDN?
**** port1_DataReceived=*
**** port1_DataReceived=I
**** port1_DataReceived=DN?
**** port1_DataReceived=*
**** port1_DataReceived=I
**** port1_DataReceived=D
**** port1_DataReceived=N?
**** port1_DataReceived=*
**** port1_DataReceived=I
**** port1_DataReceived=D
**** port1_DataReceived=N
**** port1_DataReceived=?
**** port1_DataReceived=*
**** port1_DataReceived=IDN
**** port1_DataReceived=?
**** port1_DataReceived=*
**** port1_DataReceived=I
**** port1_DataReceived=DN?
DataReceivedイベントの処理は、本質的に受信データをスレッドで処理する.
SerialPortクラスは、関数の終了後にローカル変数が解放されるため、ローカル変数として定義しないでください.スレッドはまだ終了していないし、ポートはまだ解放されていない.次の2つの異常が発生します
System.ObjectDisposedException was unhandled
Message: An unhandled exception of type 'System.ObjectDisposedException' occurred in mscorlib.dll
Additional
information: Safe handle
または
System.UnauthorizedAccessException was unhandled
HResult=-2147024891
Message= “COM5” 。