Tim*_*phy 2 .net vb.net events
假设您有一个使用CancelEventArgs类引发事件的事件提升器方法(OnXXX),使OnXXX方法返回e.Cancel的值有什么问题吗?
例如:
Public Sub ProcessFiles(folder as DirectoryInfo)
For each file in folder.GetFiles()
If OnProcessingFile(New FileEventArgs(file)) Then
.....ProcessFileCode
Else
Exit For
End If
Next
End Sub
Protected Function OnProcessingFile(ByVal e As FileEventArgs) As Boolean
RaiseEvent ProcessingFile(Me, e)
Return Not e.Cancel
End Function
Run Code Online (Sandbox Code Playgroud)
对我来说似乎是一个比这更清洁的解决方案:
Public Sub ProcessFiles(folder as DirectoryInfo)
Dim e As FileEventArgs
For each file in folder.GetFiles()
e = New FileEventArgs(file)
OnProcessingFile(e)
If e.Cancel Then
Exit For
End If
.....Process File Code
Next
End Sub
Run Code Online (Sandbox Code Playgroud)
之所以与.Net中的事件实现有关.它们通常是MulticastDelegate类型,这意味着事件可以有多个订阅者.所以RaiseEvent调用调用N个函数,其中N可以是0,1或> 1.使事件返回值仅在有1个订户的情况下按预期工作.
在0的情况下,CLR应该返回什么?
在> 1的情况下,代表应该获胜?我相信目前的实施要求最后一位代表获胜.但如果第一个说取消但最后说不取消怎么办?事件参数是解决这种差异的当前最佳方法.