我正在尝试制作一个测试小型服务器的程序。 任务是在某些时间间隔进行循环读数 为此,我想创建单独的计时器(每个计时器都有自己的间隔),但在Tick事件中,要有相同的处理程序。
一些代码:
If testStarted Then
Dim timer As New CustomTimer(tempCyclicReading.ReadInterval)
timer.AssignedNodeId = tempCyclicReading.NodeId
timer.DisplayName = tempCyclicReading.DisplayName
AddHandler timer.Elapsed, AddressOf CyclicReadingTimer_Tick
timer.Enabled = True
cyclicReadingTimers.Add(timer)
End If
Private Sub CyclicReadingTimer_Tick(sender As Object, e As EventArgs)
Try
Dim obj As CustomTimer = TryCast(sender, CustomTimer)
Dim info As DataValue = ServerObj.ReadValue(tEO.Session, obj.AssignedNodeId)
Dim temp As String = ""
temp &= " Cyclic reading: "
temp &= "ItemName: " & obj.DisplayName & ", "
temp &= "Value: " & CStr(info.Value) & ", "
LogInBox(rtbLiveData, Color.ForestGreen, temp)
Catch ex As Exception
Utils.ReadException(ex)
logger.Error("Error when ticking cycling reading timer!" & vbCrLf & Utils.ReadException(ex))
End Try
End Sub
现在我有一些问题:
所有计时器都有相同的处理程序吗?如果2或定时器将调用函数ServerObj.ReadValue(它连接到服务器并从节点读取值)会发生什么?我知道每个计时器都是在每个自己的线程中创建的。当tick事件发生并且调用处理函数时,BUt是处理程序的新实例(对应于每个计时器),是否已创建?
我是否需要提供锁机制或服务器自己处理?
我还有一个LogInBox函数,它在richtexbox中写入一些结果。同样,richtextBox是否有缓冲区或队列,并且知道对每个调用进行优先级排序和服务以显示数据吗?
非常感谢你!