Вы можете сохранить состояние красного индикатора и проверить, отличается ли новое значение от старого.Если это так, то запишите в базу данных и обновите старое значение, в противном случае ничего не делайте.
Например, представьте, что входящее значение, связанное с красным светом, равно r(t)
:
Imports System.Timers
Module Module1
Dim t As Integer = 0
Dim r() As Integer = {0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1}
Dim prevValue As Integer = Integer.MinValue
Sub tock(sender As Object, e As ElapsedEventArgs)
Dim val = r(t)
Console.Write(val.ToString() & " ")
If val <> prevValue Then
Console.WriteLine("Write to database.")
prevValue = val
Else
Console.WriteLine("Do nothing.")
End If
t = (t + 1) Mod r.Length
End Sub
Sub Main()
Dim tim As New Timers.Timer With {.Interval = 1000, .AutoReset = True}
AddHandler tim.Elapsed, AddressOf tock
tim.Start()
Console.WriteLine("Tocking... press enter to quit.")
Console.ReadLine()
tim.Stop()
tim.Dispose()
End Sub
End Module
Выходы:
Tocking... press enter to quit.
0 Write to database.
1 Write to database.
1 Do nothing.
1 Do nothing.
1 Do nothing.
0 Write to database.
0 Do nothing.
0 Do nothing.
0 Do nothing.
0 Do nothing.
1 Write to database.
0 Write to database.
1 Write to database.
1 Do nothing.
[Carries on until enter is pressed.]
Обратите внимание, что первое значение выполняет запись в базу данных, поскольку prevValue
было инициализировано значением, которое r(t)
никогда не будет иметь.После этого запись в базу данных происходит только тогда, когда r(t)
<> r(t-1)
.