Net事件安全调用模式
2009-08-07 16:57
453 查看
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
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事件的异步调用模式
- C#托管代码与C++非托管代码互相调用一(C#调用C++代码&.net 代码安全)
- C#.NET 大型通用信息化系统集成快速开发平台 4.1 版本 - 增强服务安全、阻止非授权的用户非法调用
- WCF分布式安全开发实践(4):传输安全模式之Windows身份验证:Transport_Windows_NetTcpBinding
- 一按钮事件调用另一按钮事件ASP.NET【C#】
- ASP.NET的事件模式
- .net C# 调用 XFire发布的Webservice 安全访问控制
- Asp.net 中在调用Button事件前用js对界面进行检查
- asp.net页面回传与js调用服务端事件、PostBack的原理详解
- Android 开源项目android-open-project工具库解析之(二) 高版本向低版本兼容,多媒体相关,事件总线(订阅者模式),传感器,安全,插件化,文件
- asp.net页面回传与js调用服务端事件、PostBack的原理详解
- vb.net 中调用按钮单击事件
- js 调用asp.net控件事件
- ASP.NET中启用Windows集成验证,怎样在调用System.DirectoryServices下的组件时传递安全上下文,也就是说当前用户凭据,来实现权限管理
- asp.net 给文本框添加回车事件 调用后台方法
- asp.net页面回传与js调用服务端事件、PostBack的原理详解(转)
- AJAX.net 客户端JS调用服务端事件 UpdatePannel无刷新更新
- F#与ASP.NET(2):使用F#实现基于事件的异步模式
- asp.net 事件调用事件问题?
- ASP.NET的事件模式