【问题标题】:C# serial port loop interruptC#串口循环中断
【发布时间】:2015-09-03 18:28:15
【问题描述】:

几周前我开始使用 c#,所以我不太擅长这种编程语言,但我需要它来工作。 现在我有以下问题: 我想一直在循环中从串行端口发送和接收数据(循环中的一些电压,如 200 毫秒)。在循环运行期间(应该一直如此),不能使用我的 GUI 从该串行端口发送/接收其他数据。 我已经尝试了一个计时器,它每 200 毫秒执行一次循环,但是如果我按下 GUI 中的另一个按钮将数据发送到串行端口,就会出现问题。 我现在要做的是在循环结束时检查是否按下了按钮,然后停止循环片刻,执行按钮的功能,然后重新启动循环。 任何想法我可以如何管理这个? 提前谢谢我

循环的一部分:

serialPort1.Write("GetVolt 8V\r");
serialPort1.ReadLine();
tb12V_8V_V.Text = serialPort1.ReadLine();
serialPort1.Write("GetVolt 5V3\r");
serialPort1.ReadLine();
tb5V3_V.Text = serialPort1.ReadLine();
serialPort1.Write("GetVolt 3V5\r");
serialPort1.ReadLine();
tb3V5_3V3_V.Text = serialPort1.ReadLine();

还有一个按钮:

try
{
    serialPort1.WriteLine("SetVolt 8V On\r");
    serialPort1.ReadLine();
    serialPort1.ReadLine();
    btn8V_Off.Visible = true;
    btn8V_On.Visible = false;
    btn12V_Off.Visible = false;
    btn12V_On.Visible = true;
}
catch (TimeoutException)
{
    errorMessage();
}

【问题讨论】:

  • 请出示相关代码。

标签: c# winforms serial-port windows-applications


【解决方案1】:

许多可能的方法之一......

在按钮中:

flag= true;

在循环中:

if (flag)
{
  serialPort1.WriteLine("SetVolt 8V On\r");
  serialPort1.ReadLine();
  serialPort1.ReadLine();
  btn8V_Off.Visible = true;
  btn8V_On.Visible = false;
  btn12V_Off.Visible = false;
  btn12V_On.Visible = true;
  flag= false;
}
else
{
  serialPort1.Write("GetVolt 8V\r");
  serialPort1.ReadLine();
  tb12V_8V_V.Text = serialPort1.ReadLine();
  serialPort1.Write("GetVolt 5V3\r");
  serialPort1.ReadLine();
  tb5V3_V.Text = serialPort1.ReadLine();
  serialPort1.Write("GetVolt 3V5\r");
  serialPort1.ReadLine();
  tb3V5_3V3_V.Text = serialPort1.ReadLine();
}

【讨论】:

  • 我这里有不止一个问题,首先我有不止一个按钮。好的,我认为这并不难管理,但主要问题是我无法在循环运行期间按下按钮...
  • 这是一个不同的问题。你可以看看将循环代码放在后台工作线程中,也许。或者您可以返回将循环代码放入计时器(未循环)。在任何情况下,如果串行输入延迟或丢失,您都可能会遇到问题。
猜你喜欢
  • 1970-01-01
  • 2017-11-14
  • 1970-01-01
  • 1970-01-01
  • 2011-06-02
  • 2010-09-05
  • 2011-06-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多