当前位置: 代码迷 >> VB Dotnet >> SynLock的正确用法
  详细解决方案

SynLock的正确用法

热度:92   发布时间:2016-04-25 02:08:13.0
SynLock的正确用法,求助
看代码

    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控件进行操作而不报错

也即是说,因为是同一个线程最终去执行函数,所以不被认为是多线程同步(猜测)

总之,这种异步调用中使用同步,应该是不好使
  相关解决方案