如何在.net中运行多个定时器并行

时间:2012-03-15 08:40:39

标签: .net vb.net

我有两个System.Windows.Forms.Timer,其间隔不同,代码如下

 Private Sub myTimer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles myTimer1.Tick
    myTimer1.Enabled = False
    'Code
    myTimer1.Enabled = True
End Sub

 Private Sub myTimer2_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles myTimer2.Tick
    myTimer2.Enabled = False
    'code
    myTimer2.Enabled = True
End Sub

但是有些timer2没有开始工作,直到timer1没有完成,我希望它们并行运行而不等待彼此完成

2 个答案:

答案 0 :(得分:0)

使用Timer Thread.Sleep并不是一个好主意,因为Thread.Sleeps会阻止当前线程中任何代码的执行。因此,其他计时器无法执行。

使用计时器进行“等待”并省略Thread.Sleep

答案 1 :(得分:0)

从你的问题我想你正在使用专为单线程环境设计的 System.Windows.Forms.Timer 。我怀疑当你进入第一个事件时它阻止执行直到你退出呼叫(并且内部的Sleep()真的是一个糟糕的选择)。
System.Timers.Timer 专为多线程执行而设计。这意味着要调用您的事件,Window会使用不同的线程而不会阻塞您的主线程。当然,这导致了从线程而不是UI线程更新用户控件的着名问题。

这篇关于MSDN Magazine的文章解释了.NET中可用的计时器之间的区别。