看代码
Public Class Form1
Private messagesLock As New Object
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Timer1.Interval = 1000
Timer1.Enabled = True
End Sub
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
Call addAnotherMessage()
End Sub
Private Sub addAnotherMessage()
SyncLock messagesLock
MsgBox(1)
End SyncLock
End Sub
End Class
这是测试代码,目的是锁定Synlock中的那部分代码,实现该部分代码不被多个线程同时执行。
但实际上,那部分打码仍然被time1不停的调用,没有实现阻塞排队等待的效果,msgbox稳定持续的不停弹出....
求助,怎么才能让SynLock真正起效
请大家帮忙,万分感谢!
------解决思路----------------------
实测,代码放到C#里,也一样无法锁定
应该还是因为timer和线程不太一样
timer的调用是后台线程在调用,而执行是UI线程去执行
所以你可以在timer的回调函数里直接对UI控件进行操作而不报错
也即是说,因为是同一个线程最终去执行函数,所以不被认为是多线程同步(猜测)
总之,这种异步调用中使用同步,应该是不好使