vb.net中的定时器中断问题

时间:2009-10-16 14:06:55

标签: vb.net multithreading timer

我在MVB 2008 Express中有2个计时器,一个用于控制窗口的淡入,另一个用于每隔几秒左右调用一次蜂鸣功能。问题是当窗口渐渐消失时,它会在定时器发出蜂鸣声时暂停。有任何想法吗?线程可能?

1 个答案:

答案 0 :(得分:3)

如果没有看到你的代码,我觉得这确实与线程有关。

听起来你有一个Windows应用程序,在表单上有两个Timer控件。您可能在每个计时器的Tick事件中都有代码来执行相关功能,一个用于淡化表单,另一个用于发出蜂鸣声。

这里发生的事情是Tick事件中定义的这两个函数都在同一个线程中运行。这与用于Windows窗体UI(用户界面)的线程相同。在尝试执行长时间运行的进程时尝试更新表单的某些部分(显示)时,您可以看到同样的问题 - 通常所有表单更新都会“停止”或“挂起”,直到长时间运行的进程完成。

要解决此问题,当Timer触发其Tick事件在单独的线程中运行时,您需要拥有一个(如果不是两个)代码函数。

实现此目标的最简单方法是通过BackgroundWorker组件(或类)。或者,您可以实例化并使用您自己的ThreadStart委托(这是BackgroundWorker组件所做的事情!)

如下所示:

Imports System.Threading

Public Class Form1
    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        Dim newThread As Thread
        newThread = New Thread(AddressOf DoWork)
        newThread.Start()
    End Sub

    Private Sub DoWork()
        // Long running process happens in here.
    End Sub
End Class