主线程会持续发出一系列EventClock事件,所有的10000个CWacher对象都会对每一个EventClock事件做出相应。
在单线程情况下,所有10000个CWatcher的对象是按照addhandler..addressof..语句定义的顺序依次执行响应程序的。
问题是这样:我希望当第一个EventClock事件发出后,所有CWatcher通过线程池操作并发响应这个事件,而主线程等待所有对象响应完成之后再发出第二个EventClock事件。请问如何能够实现呢?这个问题已经难倒过很多同行高手了~
主線程中聲明一個計算器,和一個對象(用來同步)
Dim counter As Integer = 0
Dim syncobj As Object
'要觸發事件前,先做一個判斷,通過查看計算器,得出是否所有的CWatcher已經響應事件,如果全部響應,才觸發
If counter Mod 10000 = 0 Then
'觸發事件
Else
'不觸發
End If
'在CWatcher響應事件的過程代碼中,加入下面的代碼
SyncLock syncobj
counter += 1
End SyncLock
事件的觸發,與是否處在多線程環境關無關係,事件觸發的代碼會在觸發事件的那個線程中執行
RaiseEvent一定會等待所以的響應完成之後才運行後面的代碼
除非你在響應事件的過程中寫代碼另外再開啟線程來處理,但這樣做就沒有意義了
Public Class MyCounter
Private cnt As Integer = 0
Private f As Boolean
Private ctl As Control
Public Event OnReset As EventHandler
Public Sub New(ByVal owner As Control)
ctl = owner
End Sub
Public Sub Enter()
SyncLock Me