【发布时间】:2017-12-15 05:38:00
【问题描述】:
我有一个应用程序,我正在检查从 PLC 读取的信号是真还是假,如果它是真的 - 它会进行一组计算,如果它是假的,它会等待信号。我正在使用一个while循环来做到这一点。但问题是真实状态会保持 1000 毫秒,循环在不到 100 毫秒内完成,因此它会再次返回,并且由于状态为真,它会再次处理它。因此,对于我从 PLC 接收到的 1 个信号,循环运行大约 9-10 次。我尝试添加 thread.sleep 但它仍然不止一次处理它。我希望循环在状态为真时运行一次,然后等待它再次变为真。
代码如下:
bool isRunning = true;
private void WorkThreadFunction()
{
while (isRunning)
{
if (ethernetIPforSLCMicroCom1.Read("B3:254/1") == "True")
{
stopWatch = Stopwatch.StartNew();
int isTriggered;
Int32.TryParse(trigger, out isTriggered);
timer1.Start();
Thread.Sleep(10);
serialcheck();
System.GC.Collect();
}
}
【问题讨论】:
-
您需要通过存储和比较来检测变化。
-
那么你不使用循环,你使用事件来进行这种行为。
-
我也尝试在计时器内移动整个 if 语句。同样的事情也会发生。您能否提供您的建议的示例代码?
标签: c# methods while-loop