0

如果我有这样的事件:

' <summary>
' Event raised when conversion progress changes.
' </summary>
Public Shared Event PercentDone(ByVal percent As Integer)

Sub(...)
    CoreConverter.StartInfo.FileName = CoreConverter_Location
    CoreConverter.Start()

    While Not CoreConverter.HasExited

        If ChrW(CoreConverter.StandardOutput.Read) = "*" Then
            progress += 1
            RaiseEvent PercentDone(progress)
        End If

    End While

    CoreConverter.Close()
    RaiseEvent Exited()

End sub

我如何在其他类(例如默认的 Form1 类)中编写事件处理程序,如下所示:

Sub Converter_Progress(Progress As Integer) Handles CoreConverter.PercentDone
     ' Some code...
End Sub

...而不是像这样手动添加处理程序:

AddHandler CoreConverter.PercentDone, AddressOf Converter_Progress
4

3 回答 3

1

我认为您必须继承具有事件的基类,然后您可以覆盖该事件,以便您的新类获取事件,并且您的新类将事件重定向到基类。还是你需要别的东西?

于 2013-10-10T17:55:56.780 回答
1

声明类级实例(在您的情况下为“CoreConverter”)时,您必须使用“WithEvents”。例如:

Private WithEvents CoreConverter As MyConverterType
于 2013-10-10T17:56:11.580 回答
1

为了使用Handles关键字,您需要将变量声明为类中的字段(在类级别,而不是任何方法的本地)并使用WithEvents关键字来执行此操作。例如:

Public Class Test
    Private WithEvents Converter As New CoreConverter()

    Sub Converter_Progress(Progress As Integer) Handles Converter.PercentDone
        ' Some code...
    End Sub    
End Class

但是,我应该提一下,即使对于自定义事件,也建议您遵循事件处理程序委托的 .NET 约定,其中始终有两个参数:发送者和事件参数。最简单的方法是使用通用EventHandler(Of T)委托,例如:

Public Class PercentDoneEventArgs
    Inherits EventArgs

    Public Property Progress As Integer
End Class

Public Class CoreConverter
    Public Event PercentDone As EventHandler(Of PercentDone)

    ' ...
End Class

然后,您的事件处理程序方法将如下所示:

Sub Converter_Progress(sender As Object, e As PercentDoneEventArgs) Handles Converter.PercentDone
    ' ...
End Sub
于 2013-10-10T17:59:29.413 回答