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節はイベントの後では無効です。最初の 2 行を次のように置き換える必要があると思います。

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

次に、null チェックなどを削除します_logToDatabaseOK。(途中で、 ​​を に変更しFunctionSub改行を取り除きます。

于 2014-04-28T22:22:31.917 に答える