之前写过一篇关于创建timer的文章(VB.net在WPF应用中启用Timer计数器创建定时操作),文中的方法是用Threading.DispatcherTimer创建的。这次用timers.timer创建。个人觉等更简便一些。过程如下
首先导入引用
Imports System.Timers
然后就可以创建了
Private tt As New Timers.Timer(3000) '申明一个间隔3秒钟的timer
然后绑定事件就可以使用了。
Private Sub Grid_Loaded(sender As Object, e As RoutedEventArgs)
tt.Enabled = True
AddHandler tt.Elapsed, AddressOf Timer_Go
End Sub
'自定义timer事件
Private Sub LogoGo(source As Object, e As ElapsedEventArgs)
MsgBox(Now)
End Sub
操作时如果出现调用线程无法访问此对象,因为另一个线程拥有该对象。则需要进行委托来处理。这是因为Timer运行在非UI 线程,如果Timer需要更新UI画面,需要使用this.Dispatcher切换到UI线程后使用Invoke或者 BeginInvoke方法更新UI画面。而DispatcherTimer运行在UI 线程,可以直接更新UI画面。这便是两者本质的区别。代码如下
'自定义timer事件
Private Sub LogoGo(source As Object, e As ElapsedEventArgs)
Dispatcher.Invoke(New Action(AddressOf hhh)) '执行委托,调用hhh过程
End Sub
Private Sub hhh()
label1.Visibility = Visibility.Visible
End Sub
vb.net执行委托更简便的写法如下(由DYLIKE大佬提供)
'自定义timer事件
Private Sub LogoGo(source As Object, e As ElapsedEventArgs)
Dispatcher.Invoke(Sub() label1.Visibility = Visibility.Visible)
End Sub
注意:此简便写法可能需要VS2017以上才适用。
© 版权声明
文章版权归作者所有,未经允许请勿转载。