转换为VB后,';是一个事件,不能直接调用'
本文关键字:事件 一个 不能 调用 VB 转换 | 更新日期: 2023-09-27 18:00:51
下面的代码是全局保存异常项目的一部分。我已经用SharpDevelop和Telerik的代码转换器将其从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
如果你真的想包含"IsNot Nothing"检查(并注意Ben N的观察结果,你不需要它(,你可以引用隐藏的VB事件字段:
If OnWriteToDatabaseEvent IsNot Nothing Then 'the event followed by "Event"
首先,VB中的事件不是处理程序集合;它们只是你可以用AddHandler
听的东西。因此,不可能知道(给出简单的翻译(是否有人听到你提出的事件。此外,As
子句在事件发生后无效。我认为你应该做的是用以下内容替换前两行:
Public Shared Event OnWriteToDatabase(DataType As String, Text As String)
然后,删除空检查和_logToDatabaseOK
内容。(当你在做的时候,把Function
改成Sub
,去掉返回。