创建一个计时器来调用C#中的方法

时间:2016-11-11 15:19:18

标签: c# serial-port console-application

我正在开发一个控制台应用程序,它能够通过串口从Arduino读取和写入数据。当我从Arduino读取时,我必须等待它的响应,所以创建一个计时器是更好的选择。

所以我创建了这个Timer,并且每2000毫秒运行一次。

static void Main(string[] args)
{
    SerialPort port = new SerialPort("COM1", 9600, Parity.Odd, 7, StopBits.One);

    Timer t = new Timer(TimerCallback, null, 0, 2000);

    port.DataReceived += Port_DataReceived;

    port.Open();
}

private static void TimerCallback(Object o)
{
    //Call the method
}

我想要做的是将此方法调用到TimerCallback

private static void Port_DataReceived(object sender, SerialDataReceivedEventArgs e)
    {
        SerialPort port = sender as SerialPort;

        // Leitura de dados
        string incoming = port.ReadExisting();
        string questionmark = "?";
        string carriageReturn = "\r";
        string text = string.Empty;

        switch (incoming)
        {
            case "@r\r":
                // send the message back
                port.Write(questionmark + "*" + carriageReturn);
                break;
            case "@{/r":
                port.Write("@" + text);
                break;
            default:
                Console.WriteLine("Unknown command sent by the Arduino!\n Command: " + incoming);
                break;
        }
    }

我应该如何调用Port_DataReceived方法?

2 个答案:

答案 0 :(得分:1)

您想直接从代码中调用事件处理程序似乎很奇怪吗?

建议使用从计时器和事件处理程序调用的新函数。

但是你为什么要这样做对我来说似乎仍然很臭。

答案 1 :(得分:0)

你不需要计时器。删除它。

只要在串行端口上收到数据,就会调用该事件。你不需要自己打电话。