将变量从事件处理程序传递到另一种方法



我正在处理一个.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)作为参数的情况。

完全访问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作为全局变量,然后相应地读/写入。但是,这不是一个好方法,所以我希望一些建议以找到一个好的解决方案。

,因为您不想将接收的_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);

相关内容

  • 没有找到相关文章

最新更新