COM10 に接続された外部センサーから受信したデータを収集する小さなアプリケーションを作成しようとしています。ポートを開き、for ループを使用して一定期間データをファイルにストリーミングする小さな C# コンソール オブジェクトとアプリケーションを正常に作成しました。
このアプリケーションを変換して、代わりに dataReceived イベントを使用してストリーミングしたいと考えています。Top 5 SerialPort Tipsを読んだ後でも、これを機能させることができず、何が欠けているのかわかりません。すべてのコードが Main にあるようにコンソール アプリケーションを書き直して、以下に貼り付けます。ハードウェアによってポートにデータが送信されていることがわかっているにもかかわらず、イベント ハンドラー port_OnReceiveDatazz が呼び出されない理由を教えてください。
ありがとう
@Gabe、@Jason Down、および@abatishchevのすべての提案に感謝します。私は困惑しており、イベントハンドラーを機能させることができないようです。端末と関係があるのかもしれません。スレッドでポートを読み取り、データを直接ファイルにストリーミングするだけで済みます。
コード
namespace serialPortCollection
{ class Program
{
static void Main(string[] args)
{
const int bufSize = 2048;
Byte[] buf = new Byte[bufSize]; //To store the received data.
SerialPort sp = new SerialPort("COM10", 115200);
sp.DataReceived += port_OnReceiveDatazz; // Add DataReceived Event Handler
sp.Open();
sp.WriteLine("$"); //Command to start Data Stream
// Wait for data or user input to continue.
Console.ReadLine();
sp.WriteLine("!"); //Stop Data Stream Command
sp.Close();
}
// My Event Handler Method
private static void port_OnReceiveDatazz(object sender,
SerialDataReceivedEventArgs e)
{
SerialPort spL = (SerialPort) sender;
const int bufSize = 12;
Byte[] buf = new Byte[bufSize];
Console.WriteLine("DATA RECEIVED!");
Console.WriteLine(spL.Read(buf, 0, bufSize));
}
}
}