我正在处理一个.NET应用程序,该应用程序从事件处理程序收到的串行端口(Arduino)中获取消息。但是,我无法将事件处理程序存储的消息传递给另一种方法。当前,接收数据的事件处理程序看起来像这样:
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()
将从另一个类调用,因此这些操作无法在事件处理程序中实现。
编辑:对不起,在这里错过了一个重要的一点。我希望接收到的_data可以在getMessage中可用,而无需从参数获得。那是因为另一类需要像现在只有(out output_data)
作为参数的情况。
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
作为全局变量,然后相应地读/写入。但是,这不是一个好方法,所以我希望一些建议以找到一个好的解决方案。
,因为您不想将接收的_data用作参数,所以我相信您的最佳选择是全局变量。但是,如果您的唯一问题是您需要从其他地方调用此方法,则仍然可以与参数一起使用。与参数一起使用的方法更复杂的方法:
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时,您可以这样称呼它:
getMessage(output_data, received_data, true);
当您想从不需要接收的_data作为参数的其他地方调用它时,您可以这样称呼它:
getMessage(output_date, "", false);