После преобразования в VB "это событие, которое нельзя вызвать напрямую".
Приведенный ниже код является частью проекта по глобальному сохранению исключений. Я преобразовал это из C# в VB с SharpDevelop и с Telerik's Code Converter, и я получаю идентичные результаты.
Просматривая Stackru, я обнаружил вопрос: "Почему этот C# не конвертируется в VB?", Который обращается к той же самой ошибке, что и я, и показывает простой ответ, но не показывает, как ее использовать - по крайней мере, так я знал бы, что изменить.
То, что я получаю, это ошибка на ONWRITETODATABASE. Полная ошибка: "Общедоступное общее событие OnWriteToDatabase(тип As String, текст 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 ответа
Если вы действительно хотите включить проверку "IsNot Nothing" (и обратите внимание, что Бен Н заметил, что она вам не нужна), вы можете обратиться к скрытому полю события 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
Избавляемся от возврата.