转换为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

转换为VB后,';是一个事件,不能直接调用'

如果你真的想包含"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,去掉返回。