我有一个Timer类的问题,因为你可能会在调用Dispose()之前调用一个定时器,因为你可能会从其他一些线程调用Dispose()。你可能有类似的东西:
Public Sub TimerTick() Handles itsTimer.Elapsed
Do Something
End Sub
然后从代码中的其他位置开始,当您的应用完成后,您可以调用
itsTimer.Dispose()
我能想到这样做的唯一方法是:
Public Sub SomeMethod()
SyncLock(itsTimer.SynchronizingObject)
itsTimer.Dispose()
End SyncLock
ENd Sub
这不是一件好事。因为我正在处理我正在处理的物体上的锁定。我可以创建自己的锁和syncLock但是有一个简单的方法吗?
答案 0 :(得分:2)
锁定SynchronizingObject
不会阻止竞争条件。也不会取消注册tick事件。在这两种情况下,都可以在处理定时器后运行事件。
您需要在计时器之外定义一个共享状态,该状态在计时器事件处理程序的开头显式检查。我称之为asynchronous callback context。
答案 1 :(得分:1)
Unregister嘀嗒事件。
使用RemoveHandler
取消注册事件处理程序。