以下代码是全局保存例外的项目的一部分。我已经使用SharpDevelop和Telerik的Code Converter将它从C#转换为VB,并得到相同的结果。
通过Stackoverflow搜索,我发现了这个问题:“'为什么这个C#不会转换为VB?',它解决了我遇到的同样错误并显示了一个简单的答案,但没有说明如何使用它 - 在至少我会知道要改变什么。
我得到的是“ONWRITETODATABASE”上的错误。完整的错误是:'Public Shared Event OnWriteToDatabase(type As String,text As String)'是一个事件,不能直接调用。使用'RaiseEvent'语句来引发事件。
我要做些什么来改变这项工作? (帽子是我的。)
Public Delegate Sub DatabaseWriteEventHandler(type As String, text As String)
Public Shared Event OnWriteToDatabase As DatabaseWriteEventHandler
Protected Function OnWriteToDatabase() As Boolean
_logToDatabaseOK = False
If ONWRITETODATABASE IsNot Nothing Then
Try
RaiseEvent OnWriteToDatabase(_exceptionType, _exceptionText)
_logToDatabaseOK = True
Catch ex As Exception
_results.Add("LogToDatabase", ex.ToString())
End Try
Else
_results.Add("LogToDatabase", "No subscriptions to OnWriteToDatabase event")
End If
Return _logToDatabaseOK
End Function
答案 0 :(得分:3)
如果你真的想要包含“IsNot Nothing”检查(并注意Ben N的观察,你不需要它),你可以参考隐藏的VB事件字段:
If OnWriteToDatabaseEvent IsNot Nothing Then 'the event followed by "Event"
答案 1 :(得分:0)
首先,VB中的事件不是处理程序集合;他们只是你可以用AddHandler
听的东西。因此,不可能知道(通过简单的翻译)是否有人听到你提出的事件。此外,As
条款在事件发生后无效。我认为你应该做的是用这个替换前两行:
Public Shared Event OnWriteToDatabase(DataType As String, Text As String)
然后,删除空检查和_logToDatabaseOK
内容。 (当你在此时,将Function
更改为Sub
,摆脱回报。