我正在开发一个.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()
将从另一个类调用,因此这些操作无法在事件处理程序中实现。
编辑:抱歉,错过了重点。我希望receive_data在getMessage中可用而不从参数中获取它。这是因为另一个类需要完全像现在一样访问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
作为全局变量,然后相应地读/写它。但是,这不是一个好方法,所以我想提出一些建议,以便找到一个好的解决方案。
答案 0 :(得分:0)
由于您不想使用received_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);
如果您想从其他地方拨打电话,而您不需要将received_data作为参数,可以这样称呼它:
getMessage(output_date, "", false);