线程中的串行WriteLine

时间:2017-09-05 19:47:06

标签: c# multithreading

我需要在C#中编写代码,每隔2秒就会将数据从Serial发送到Arduino。

这就是我试图做的事情:

Thread sender = new Thread(voidSender);
public static void voidSender() {
  serialArduino.WriteLine("Test");
  Thread.Sleep(2000);
}

2 个答案:

答案 0 :(得分:0)

在您的示例中,您将启动一个运行已定义方法的线程,并发送一条消息。要多次发送消息,您需要为此方法添加循环,如

public void voidSender()
{
    //Send forever
    while(true)
    {
        serialArduino.WriteLine("Test");
        Thread.Sleep(2000);
    }
}

但是,通常通过使用计时器来定期执行事件。只需初始化像

这样的计时器
System.Timers.Timer sendMessageTimer = new System.Timers.Timer(2000);
sendMessageTimer.Elapsed += OnSend;
sendMessageTimer.AutoReset = true;
sendMessageTimer.Enabled = true;

在经过处理的处理程序中,您可以发送消息,如

private void OnSend(Object source, ElapsedEventArgs e)
{
    serialArduino.WriteLine("Test");
}

答案 1 :(得分:-2)

老实说,我不知道你为什么要将Arduino这样的开源平台与C#.net混合使用,如果它没有运行在核心上,但是你的关注不是我的,我个人不会这样做这一点。

如果你想每两秒发送一次命令,我会建议你使用集成在每个windows系统中的windows调度程序,但是你可以很容易地自己实现一个时钟,为什么还需要当普通用户几乎注意到时,将2秒钟的重负荷放在这个时间框架上。如果你不想使用基于时钟的系统,你可以使用这个修改过的例子,但它可能会在递归后的某个时候抛出stackoverflow异常,如果你计划从长远来看,你必须远离它们。

//First sorry for reusing your code but I am writing from my smartphone and 
//I am kind of lazy here is quick modification that would work but not the most clever way around
    Thread sender = new Thread(voidSender);
    public static void voidSender()
    {
        start:
        serialArduino.WriteLine("Test");
        Thread.Sleep(2000);
        goto start;
    }