2016-08-15 94 views
0

我正在处理应用程序,我想创建多个定时器,以不同的时间间隔触发。在每次火灾中,我希望他们打电话给相关的功能。应用程序内的多个线程

最初,我想要一个计时器,每100ms,1秒,10秒,30秒等发射。 在每个“打勾”上,我想调用一个从设备读取数据并将其存储在缓冲区中的函数。

什么是创建所需计时器并处理其事件的最佳方式?

编辑 我已经为每个计时器做了类似的事情,但它很麻烦,所以寻找更简单/更智能的东西。

'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

我们不是一个真正的代码设计/写服务。如果你一旦开始编写自己的代码并且卡住了,最好来到这里。然后你可以发布你的代码和一个特定的问题。与此同时,你有没有尝试过谷歌搜索? – Enigmativity

+1

如果你想使用两个计时器,那么你做任何你会做一个计时器,但你做了两次。如果你不知道如何使用一个计时器,那么你应该先研究一下。 – jmcilhinney

+0

你的问题听起来像是你在每个计时器上调用相同的方法,但这是没有意义的,因为100ms计时器会在其他人做任何事情时触发。你实际上想要对每个计时器做什么? – Enigmativity

回答

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)) 

,其中处理器被定义为。

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 
+0

谢谢,我正在思考这些问题。我怎样才能确定哪个计时器叫MyHandled?每个定时器都会调用不同的函数 –

+0

如果你需要这个,那么就把'AddressOf MyHandler'改成'AddressOf HandlerForTimer1' ......等等。并且有4个不同的处理器。 – FloatingKiwi

+0

谢谢,如果我想从数据库中的列表中动态创建定时器,怎么办?我可以遍历结果数据并创建/添加定时器到列表中。但我如何管理创建每个计时器的多个地址项目? –

0

使用时间间隔

Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick 
    ' Do What you want here 
End Sub 

Private Sub Timer2_Tick(sender As Object, e As EventArgs) Handles Timer2.Tick 
    ' Do What you want here 
End Sub 

' Have a private sub that handles each tick .. 

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 
    Timer1.Interval = 100 ' 100 ms 
    Timer2.Interval = 1000 ' 1 seconds 
    Timer3.Interval = 10000 ' 10 seconds 
    Timer4.Interval = 30000 ' 30 seconds 
    Timer1.Start() : Timer2.Start() : Timer3.Start() : Timer4.Start() 
End Sub 

你去那里..你可以从这里开始..

+0

谢谢。我试图避免的是硬编码的价值。我想最终通过从数据库加载的代码创建所有内容 –