Wpf 如何在VB.Net中使用定时器?
我正在尝试用VB.Net编程一个迪斯科灯光机。 我在WPF上有四个椭圆,我希望它们“亮起”(=将填充从白色更改为某种颜色),然后等待0.5s,然后将填充更改回白色-所有操作都按照预先编写的顺序进行 我试图使用dispatherimer,但实际上我不知道如何让它工作。 省略号是名称pad0、pad1等Wpf 如何在VB.Net中使用定时器?,wpf,vb.net,dispatchertimer,Wpf,Vb.net,Dispatchertimer,我正在尝试用VB.Net编程一个迪斯科灯光机。 我在WPF上有四个椭圆,我希望它们“亮起”(=将填充从白色更改为某种颜色),然后等待0.5s,然后将填充更改回白色-所有操作都按照预先编写的顺序进行 我试图使用dispatherimer,但实际上我不知道如何让它工作。 省略号是名称pad0、pad1等 Public Sub timer() Dim t As New System.Windows.Threading.DispatcherTimer() AddHandler t.Tic
Public Sub timer()
Dim t As New System.Windows.Threading.DispatcherTimer()
AddHandler t.Tick, AddressOf dispatcherTimer_Tick
t.Interval = New TimeSpan(0, 0, 1)
End Sub
Private Sub dispatcherTimer_Tick(ByVal sender As Object, ByVal e As EventArgs)
End Sub
Private Sub play_Click(sender As Object, e As RoutedEventArgs) Handles play.Click
Dim sequence = New Integer() {1, 0, 3, 2}
For i As Integer = 0 To 3
Select Case sequence(i)
Case 0
pad0.Fill = Brushes.Blue
**this is where I want the timer to run!**
padOff(pad0)
Case 1
pad1.Fill = Brushes.Yellow
**this is where I want the timer to run!**
padOff(pad1)
Case 2
pad2.Fill = Brushes.Green
**this is where I want the timer to run!**
padOff(pad2)
Case 3
pad3.Fill = Brushes.Red
**this is where I want the timer to run!**
padOff(pad3)
End Select
Next
End Sub
Public Sub padOff(ByVal pad As Shape)
pad.Fill = Brushes.White
End Sub
UI仅在执行所有代码后更新。因此,您看不到蓝色的变化。更糟糕的是,你的UI完全冻结了0.5秒
正确的方法是:
- 启动一个等待0.5s的新线程,然后更改颜色(请确保使用Dispatcher.Invoke在此处更改UI线程中的颜色)或
- 等待0.5s并更改RunWorkerCompleted(已在UI线程中执行)中的颜色,或
- 使用asnyc等待(例如,
),这会导致UI在等待期间得到更新和响应wait Task.Delay(500)
- 启动一个等待0.5s的新线程,然后更改颜色(请确保使用Dispatcher.Invoke在此处更改UI线程中的颜色)或
- 等待0.5s并更改RunWorkerCompleted(已在UI线程中执行)中的颜色,或
- 使用asnyc等待(例如,
),这会导致UI在等待期间得到更新和响应wait Task.Delay(500)
画笔
,例如画笔.White
。不需要创建自己的代码。@Clemens谢谢,我已经更新了代码。这是一个事件驱动的世界。没有油漆,没有聚会,只有一张便条。类中有许多预定义的画笔画笔
,例如画笔.White
。不需要创建自己的代码。@Clemens谢谢,我已经更新了我的代码。这是WPF。请不要使用Timer和Control.Invoke。这里有dispatchermer
。@Clemens:注意,我把“timer”小写了。请注意,它后面的链接已经链接到DispatcherTimer
的描述,这是WPF的正确计时器。@Clemens:啊,是的,它是Dispatcher.Invoke,在WPF中。谢谢,修好了。@Heinzi谢谢。我想用定时器。我已经更新了我的代码,但仍然不知道如何让它工作。我很乐意得到更多的帮助。这是WPF。请不要使用Timer和Control.Invoke。这里有dispatchermer
。@Clemens:注意,我把“timer”小写了。请注意,它后面的链接已经链接到DispatcherTimer
的描述,这是WPF的正确计时器。@Clemens:啊,是的,它是Dispatcher.Invoke,在WPF中。谢谢,修好了。@Heinzi谢谢。我想用定时器。我已经更新了我的代码,但仍然不知道如何让它工作。我很乐意得到更多的帮助。