Запись и воспроизведение поднятых событий в VB.NET - PullRequest
3 голосов
/ 13 марта 2012

Я реализовал связь между двумя классами, используя события в VB.NET.Теперь я хочу сохранить (записать) все произошедшие события и повторно вызвать их (воспроизвести) позже.

Вот что у меня уже есть:

Class1:

Public Event Button1Pressed(ByVal sender As Object)

Private Sub btnButton_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btnButton.Click
    RaiseEvent Button1Pressed(Me)
End Sub

Public Sub handleDisplayChanged(ByVal sender As System.Object, ByVal txt As String)

        '... Some code
End Sub

Класс 2:

Public Event DisplayTextChangedEvent(ByVal sender As System.Object, ByVal text As String)

'In the constructor:
AddHandler Me.DisplayTextChangedEvent, AddressOf class1Instance.displayText
AddHandler class1Instance.Button1Pressed, AddressOf Me.buttonPressed

'Somewhere in the logic:
Public Sub buttonPressed(ByVal sender As Object)

    'Compute text
    '...
    RaiseEvent DisplayTextChangedEvent(text)
End Sub

Я мог бы добавить другой обработчик к событию, которое я хочу записать, но затем в обработчике я получаю только те параметры, которые передаются в событие, а не само событие.,Другая вещь, которую я не знаю, как решить, это то, что я не могу вызвать событие из внешнего класса.

Есть ли хорошее решение для моей проблемы?

1 Ответ

0 голосов
/ 13 марта 2012

Чтобы записать событие, вы можете сделать вспомогательный метод, который делает запись И поднятие. Так что вместо этого:

RaiseEvent Button1Pressed(Me)

сделать это:

Sub RaiseButton1PressedEvent()
  RaiseEvent Button1Pressed(Me)  <--raise the event

  RecordEvent("Button1Pressed")  <--record the event
End Sub

То, что делает RecordEvent, должно быть разработано, конечно.

Чтобы вызвать событие из внешнего класса, реализуйте этот метод:

Sub ReplayButton1PressedEvent()
  RaiseEvent Button1Pressed(Me)  <--raise the event
End Sub

Теперь, если у вас много событий, это может стать утомительным. Есть несколько хороших способов решить эту проблему:

  1. Вероятно, есть способ вызвать событие, используя отражение, основываясь на имени события, чтобы вы могли реализовать одну универсальную функцию вместо одной для каждого события, то есть вместо Sub RaiseButton1PressedEvent() вы могли бы есть Sub RaiseEventByName(sEventName As String)

  2. Используйте генерацию кода для генерации частичного класса с методами Raise и Replay для каждого события, которое вы хотите отслеживать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...