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

时间:2017-09-11 19:46:58

标签: c# .net events methods event-handling

我正在开发一个.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作为全局变量,然后相应地读/写它。但是,这不是一个好方法,所以我想提出一些建议,以便找到一个好的解决方案。

1 个答案:

答案 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);