如何使用" e"创建活动变量成员?

时间:2013-10-11 19:16:38

标签: .net vb.net winforms events event-handling

我创建了一个事件来管理流程的执行结束

' <summary>
' Event raised when CoreConverter process has exited.
' </summary>
Public Shared Event Exited As EventHandler(Of ExitedEventArgs)
Public Class ExitedEventArgs : Inherits EventArgs
    Public Property Message As String
End Class

当进程退出时会引发事件,以发送包含信息消息或错误消息的消息。

当进程退出时,我只返回一条消息,例如,如果erroroutput为空,那么我发送StandardOutput,但如果ErrorOutput不为空,那么我只发送ErrorOutput。

    Select Case CoreConverter.ExitCode

        Case 0
             RaiseEvent Exited(StandardOutput, Nothing) ' Return StandardOutput

        Case Else
             RaiseEvent Exited(ErrorOutput, Nothing) ' Return ErrorOutput

    End Select

我想做的是更专业,以便能够管理“e”变量中的两种消息类型(我认为这是正确的方法,如果我错了请告诉我)

Private sub ProcessExited(byval Message as string, byval e as eventargs) _
handles myClass.Exited

    ' here I want to be able to manage both message types like this:

    msgbox(e.ErrorOutput)
    msgbox(e.StandardOutput)

end sub

我真的想这样做也是为了添加更多可以通过“e”变量加入的信息,就像我在其他第三方类中看到的那样,例如:

msgbox(e.ProcessHandle)
msgbox(e.ToalExecutionTime)
msgbox(e.SomeExtraInfo)

我在MSDN中搜索了如何制作自定义“e”成员,但我找不到任何内容,所以我不知道如何开始这样做。

2 个答案:

答案 0 :(得分:2)

你是如此接近,你只需要为你传递的类别添加更多属性为“e”。

Public Class ExitedEventArgs : Inherits EventArgs
    Public Property ErrorOutput As String
    Public Property StandardOutput As String
    Public Property SomeExtraInfo as String
End Class

当您定义事件时,请执行以下操作:(从未看到它被声明为通用???)

Public Shared Event Exited As EventHandler(byval sender as object,byval e as ExitedEventArgs)

这允许你传递WHAT正在调用事件,有时非常有用,以及你的事件args的实例(注意“as ExitedEventArgs”)。

然后当你打电话时,你可能会这样做:

Dim x as new ExitedEventArgs
x.ErrorOutput = "Your Error"
x.StandardOutput = "Some Output text"
x.SomeExtraInfo = "You extra info here"
RaiseEvent Exited(me,x)

答案 1 :(得分:1)

您可以像这样简单地创建自己的事件arg类:

Friend Class MyEventArgs
    Public Property Foo As String
    Public Property Bar As Integer

    Sub new(t1 as String, r2 As Integer)
        Foo = t1
        Bar = t2
    End Sub

End Class

Public Event MyEvent(ByVal ea As MyEventArgs)

举办活动:

Protected Friend Sub MakeEvent(ByVal ea As MyEventArgs)
        RaiseEvent MyEvent(ea)
End Sub

它运行正常,然而如果你运行Code Analysis,它会告诉你它应该从EventArgs继承。所以,这样做,但你仍然可以追加自己的属性:

Friend Class MyEventArgs
    Inherits From EventArgs

    Public Property Foo As String

EventArgs中没有多大价值,但它让CA感到满意。