应用程序中的多个线程

时间:2016-08-15 05:03:24

标签: vb.net multithreading

我正在开发一个应用程序,我想创建多个定时器,所有定时器都以不同的间隔触发。在每次开火时,我希望他们称之为相关功能。

最初,我想要一个每100毫秒,1秒,10秒,30秒等时间点火的计时器。 在每个" tick"我想调用一个从设备读取数据并将其存储在缓冲区中的函数。

创建所需计时器和处理事件的最佳方法是什么?

EDIT 我为每个计时器做了类似的事情,但它很麻烦,所以寻找更简单/更聪明的东西。

'Variables

Dim Timer100msUpdateInterval As DateInterval = 100
Dim Timer100msUpdate As Threading.Timer

'On Load
Dim TimerCallBack100ms As Threading.TimerCallback = New Threading.TimerCallback(AddressOf Timer100msUpdateTimerEvent)
Timer100msUpdate = New Threading.Timer(TimerCallBack100ms, Nothing, 100, Timer100msUpdateInterval)

'For each timer
Private Sub Timer100msUpdateTimerEvent(ByVal state As Object)
    do100msTimerStuff()
End Sub

我喜欢@kiLLua的概念方法,但需要某种方法来识别每个计时器何时触发,哪个计时器运行

1 个答案:

答案 0 :(得分:1)

    Dim timers As New List(Of System.Threading.Timer)
    timers.Add(New System.Threading.Timer(AddressOf MyHandler, Nothing, 100, 100))
    timers.Add(New System.Threading.Timer(AddressOf MyHandler, Nothing, 1000, 1000))
    timers.Add(New System.Threading.Timer(AddressOf MyHandler, Nothing, 10000, 10000))
    timers.Add(New System.Threading.Timer(AddressOf MyHandler, Nothing, 30000, 30000))

其中handler被定义为。

Sub MyHandler(state As Object)

End Sub

如果您的设备无法同时发出2个请求,那么您需要在MyHandler中实现一些锁定。

timers.Add(New System.Threading.Timer(AddressOf MyHandler, myDataRow, 30000, 30000))

Sub MyHandler(state As Object)
     dim row = CType(state, DataRow)
     ...
End Sub