Public Class MyPublisher
Public Delegate Sub GenericEventHandler(Of T, U)(ByVal t As T, ByVal u As U)
Public Delegate Sub GenericEventHandler(Of T)(ByVal t As T)
Private deles As New List(Of GenericEventHandler(Of Integer))
Public Event SyncNumberChanged As GenericEventHandler(Of Integer)
Public Custom Event AsyncNumberChanged As GenericEventHandler(Of Integer)
AddHandler(ByVal value As GenericEventHandler(Of Integer))
deles.Add(value)
End AddHandler
RemoveHandler(ByVal value As GenericEventHandler(Of Integer))
deles.Remove(value)
End RemoveHandler
RaiseEvent(ByVal t As Integer)
Dim synchronizer As System.ComponentModel.ISynchronizeInvoke
For Each dele As GenericEventHandler(Of Integer) In deles
synchronizer = TryCast(dele.Target, System.ComponentModel.ISynchronizeInvoke)
If synchronizer IsNot Nothing Then
If synchronizer.InvokeRequired = True Then
synchronizer.Invoke(dele, New Object() {t})
Return
End If
End If
dele.DynamicInvoke(t)
Next
End RaiseEvent
End Event
Public Sub AsyncFireEvent(ByVal int As Integer)
RaiseEvent AsyncNumberChanged(int)
End Sub
Public Sub SyncFireEvent(ByVal int As Integer)
End Sub
End Class
Net事件安全调用模式
最新推荐文章于 2023-02-11 15:56:58 发布