私はイベントハンドラが受け取るシリアルポート(Arduino)からメッセージを受け取る.NETアプリケーションを開発中です。ただし、イベントハンドラによって格納されているメッセージを別のメソッドに渡すことはできません。現在、データを受信したイベントハンドラは次のように探しています: イベントハンドラから別のメソッドに変数を渡す
private static void MessageReceivedHandler(object sender, SerialDataReceivedEventArgs e)
{
SerialPort serialPort = (SerialPort)sender;
string received_data = serialPort.ReadExisting(); // pass received_data to another method
}
私は
received_data
変数が
getMessage()
という名前の別のメソッドに渡すことにしたいです。このメソッドは、受け取ったデータを使用していくつかの操作を実行し、返されます。
getMessage()
は別のクラスから呼び出されるため、これらの操作はイベントハンドラでは実装できません。
EDIT:申し訳ありませんが、重要な点はここにありません。受信したデータをgetMessageで使用できるようにするには、パラメータから取得する必要があります。なぜなら、他のクラスは、パラメータとして(out output_data)
だけでなく今のようにgetMessageに正確にアクセスする必要があるからです。
public bool getMessage(out output_data)
{
bool success = true;
// This is the part I do not understand how to implement
string input_data = received_data;
try{
// Do operations with the input_data (which is the data from event handler).
} catch (Exception e)
{
Console.WriteLine(e.ToString());
succcess = false;
}
output_data = input_data;
return success;
}
私はグローバル変数としてreceived_data
を持っており、それに応じて、それに読み取り/書き込みすることが可能であると仮定します。しかし、これは良いアプローチではないので、私は良い解決策を見つけるためにいくつかのアドバイスをしたいと思います。
* MessageReceivedHandler *で* getMessage *を呼び出さないのはなぜですか? –
'getMessage(received_data);'を使うと何がうまくいかないのか説明できますか?それはそのデータをそのメソッドに渡す明白な方法でしょうか? – oerkelens
文字列を偶数ハンドラ内のキューに入れ、そこからgetMessageデータをフェッチすることができます。 –