自助推荐
立即入驻

vb.net在WPF中创建timer的另一种方法(委托)

博客3年前更新 桔子雨
1,391 00
vb.net在WPF中创建timer的另一种方法(委托)

之前写过一篇关于创建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以上才适用。

© 版权声明

相关文章