簡體   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