[英]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
現在,如果你有很多事件,這可能會變得乏味。 有幾種很好的方法可以解決這個問題:
根據事件的名稱,可能有一種使用反射來引發事件的方法,因此您可以為每個事件實現一個通用函數而不是一個,即:而不是Sub RaiseButton1PressedEvent()
,您可以使用Sub RaiseEventByName(sEventName As String)
使用代碼生成為要跟蹤的每個事件使用“提升”和“重放”方法發出部分類。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.