繁体   English   中英

在VB.NET中记录和重放引发的事件

[英]Record and replay raised events in VB.NET

我通过使用VB.NET中的事件实现了两个类之间的通信。 现在我想存储(记录)发生的所有事件,并在以后再次重新引发(重放)它们。

这是我已经拥有的:

1类:

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

我可以为我想要记录的事件添加另一个处理程序,但是在处理程序中我只获取传递给事件的参数而不是事件本身。 我不知道如何解决的另一件事是,我无法从外部课堂提出一个事件。

我的问题有一个很好的解决方案吗?

要记录事件,您可以创建一个辅助方法来执行录制和提升。 所以不是这样的:

RaiseEvent Button1Pressed(Me)

做这个:

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

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

RecordEvent ,还必须设计RecordEvent功能。

要从外部类中引发事件,请实现以下方法:

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

现在,如果你有很多事件,这可能会变得乏味。 有几种很好的方法可以解决这个问题:

  1. 根据事件的名称,可能有一种使用反射来引发事件的方法,因此您可以为每个事件实现一个通用函数而不是一个,即:而不是Sub RaiseButton1PressedEvent() ,您可以使用Sub RaiseEventByName(sEventName As String)

  2. 使用代码生成为要跟踪的每个事件使用“提升”和“重放”方法发出部分类。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM