2

下面的代码是全局保存异常的项目的一部分。我已经使用 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
4

2 回答 2

3

如果您真的想包括“IsNot Nothing”检查(并注意 Ben N 的观察,您不需要它),您可以参考隐藏的 VB 事件字段:

If OnWriteToDatabaseEvent IsNot Nothing Then 'the event followed by "Event"
于 2014-04-28T23:30:44.537 回答
0

首先,VB 中的事件不是处理程序集合;它们只是你可以听的东西AddHandler。因此,不可能知道(通过给出的简单翻译)是否有人听到你提出的事件。此外,As子句在事件发生后无效。我认为你应该做的是用这个替换前两行:

Public Shared Event OnWriteToDatabase(DataType As String, Text As String)

然后,删除空检查和这些_logToDatabaseOK东西。(当您使用它时,将其更改Function为 a Sub,摆脱返回。

于 2014-04-28T22:22:31.917 回答