前提・実現したいこと
USBでデバイスと通信するプログラムを実装しています。
プログラムではSerialPortクラスを使用していて、
DataReceivedメソッド内でWriteメソッドを呼び出して最初に受け取ったデータと
Writeメソッドにて受け取ったデータの両方をDBに格納したいです。
※デバイスのほうがまだないため、手探りで実装中ですので、確認がすぐにはできない状況です。
お力添えをお願い致します。
#####修正、加筆
通信フォーマットは、テキスト形式です。
区切りは、CRLFの改行コードになります。
発生しそうな問題・エラーメッセージ
DataReceivedメソッド内での処理のため、うまくいかないのではと思っています。
該当のソースコード
C#
1/// <summary> 2/// データ受信時イベント 3/// </summary> 4/// <param name="sender"></param> 5/// <param name="e"></param> 6private void SerialPort_DataReceived(object sender, SerialDataReceivedEventArgs e) 7{ 8 if (serialPort != null && serialPort.IsOpen) 9 { 10 try 11 { 12 // 受信データを読み込む 13 SerialPort sp = (SerialPort)sender; 14 string sChildData = sp.ReadExisting(); 15 if (データが二つそろっている) { 16 // DBへ格納処理 17 } else { 18 // write処理 19 DataWrite(string buffer); 20 } 21 } 22 } 23} 24 25/// <summary> 26/// データ書き込み処理 27/// </summary> 28/// <param name="command"></param> 29private bool DataWrite(string buff) 30{ 31 int iRetry = 1; 32 33 try 34 { 35 serialPort.Write(buff); 36 return true; 37 } 38 catch (IOException ex) 39 { 40 // リトライは3回まで 41 iRetry += 1; 42 43 if (3 < iRetry) 44 { 45 this.DataWrite(buff); 46 } 47 return false; 48 } 49 catch (Exception ex) 50 { 51 iRetry += 1; 52 53 if (3 < iRetry) 54 { 55 this.DataWrite(buff); 56 } 57 return false; 58 } 59}
試したこと
デバイスがないため試せておりません。
補足情報(FW/ツールのバージョンなど)
Windows 10
Visual Studio 2017
回答1件
あなたの回答
tips
プレビュー