2017-09-11 3 views
0

私はイベントハンドラが受け取るシリアルポート(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を持っており、それに応じて、それに読み取り/書き込みすることが可能であると仮定します。しかし、これは良いアプローチではないので、私は良い解決策を見つけるためにいくつかのアドバイスをしたいと思います。

+1

* MessageReceivedHandler *で* getMessage *を呼び出さないのはなぜですか? –

+3

'getMessage(received_data);'を使うと何がうまくいかないのか説明できますか?それはそのデータをそのメソッドに渡す明白な方法でしょうか? – oerkelens

+0

文字列を偶数ハンドラ内のキューに入れ、そこからgetMessageデータをフェッチすることができます。 –

答えて

0

received_dataをパラメータとして使用したくないので、あなたの最良の選択はグローバル変数です。 しかし、このメソッドを別の場所から呼び出す必要があるという唯一の問題がある場合は、引き続きパラメータを使用できます。より複雑な方法あなたの方法は、パラメータで使用する:あなたはハンドラからのgetMessageを呼び出すと

public bool getMessage(out output_data, String received_data, bool receivedDataNeeded) 
{ 
    bool success = true; 
if(receivedDataNeed){ 
     // 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; 
    } 
}else{ 
    string input_data = "Whatever you need to initialize it to"; 
    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; 
} 

は、あなたがこのようにそれを呼び出すことができます:あなたはどこからそれを呼び出したい

getMessage(output_data, received_data, true); 

それ以外の場合は、received_dataをパラメータとして使用する必要はありません。

getMessage(output_date, "", false); 
+0

チップをありがとう。 getMessageメソッドはクラスの外部からのみ呼び出されるため、received_dataはパラメータとして使用されません。したがって、私はグローバル変数としてreceived_dataを実装する必要がありますか? – Mrchacha

+0

それから私ははいと信じています。私はあなたの文字列を渡す別の方法を考えることができません。私が信じる最も便利なソリューションはグローバル変数です。 – kdem

関連する問題