多个计时器,同一个处理程序? MultiThreading,服务器请求

时间:2018-02-08 12:16:34

标签: vb.net multithreading events timer

我正在尝试制作一个测试小型服务器的程序。 任务是在某些时间间隔进行循环读数 为此,我想创建单独的计时器(每个计时器都有自己的间隔),但在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

现在我有一些问题:

  1. 所有计时器都有相同的处理程序吗?如果2或定时器将调用函数ServerObj.ReadValue(它连接到服务器并从节点读取值)会发生什么?我知道每个计时器都是在每个自己的线程中创建的。当tick事件发生并且调用处理函数时,BUt是处理程序的新实例(对应于每个计时器),是否已创建?

  2. 我是否需要提供锁机制或服务器自己处理?

  3. 我还有一个LogInBox函数,它在richtexbox中写入一些结果。同样,richtextBox是否有缓冲区或队列,并且知道对每个调用进行优先级排序和服务以显示数据吗?

  4. 非常感谢你!

0 个答案:

没有答案