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

时间:2014-04-28 22:05:46

标签: c# vb.net raiseevent

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

2 个答案:

答案 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,摆脱回报。