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