|
楼主 |
发表于 2011-7-9 08:32:09
|
显示全部楼层
自己发现问题了:
在自己的类中,锁定时阻止了自己,但是因为不是在主程序中锁定,所以主程序继续下一句了。
改成下边了,但是发现在主程序中,如果上一个锁定的代码还在执行,在另一个地方锁定的话,
就陷入第2次锁定的死循环中了。
不知道有什么好办法没有?
------------------------------------------------
Public Class MyMonit
Dim Locked As Boolean = False
Dim flg As String = "---"
Dim WithEvents bgw As New System.ComponentModel.BackgroundWorker()
Public Sub New(ByVal objLock As Object, ByVal flg As String)
Me.flg = flg
bgw.RunWorkerAsync(objLock)
End Sub
Public Sub WaitUntilLocked()
Do Until Locked
System.Threading.Thread.Sleep(10)
Application.DoEvents()
'Debug.Print("Wait Locked " & flg & ", " & Now)
Loop
End Sub
Public Sub [Exit]()
Locked = False
End Sub
Private Sub bgw_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bgw.DoWork
System.Threading.Monitor.Enter(e.Argument)
Locked = True
Debug.Print("Locked " & Now)
Do While Locked
System.Threading.Thread.Sleep(1)
Application.DoEvents()
Loop
System.Threading.Monitor.Exit(e.Argument)
End Sub
Private Sub bgw_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles bgw.RunWorkerCompleted
Me.bgw.Dispose()
End Sub
End Class |
|