1

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

' <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”成员,但我找不到任何东西,所以我不知道如何开始这样做。

4

2 回答 2

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)

这允许您传递调用事件的内容,有时非常有用,以及您的事件参数的实例(注意“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)
于 2013-10-11T21:55:25.663 回答
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

它工作得很好,但是如果你在上面运行代码分析,它会告诉你它应该从 EventArgs 继承。所以,做吧,但你仍然可以附加你自己的属性:

Friend Class MyEventArgs
    Inherits From EventArgs

    Public Property Foo As String

EventArgs 没有太多价值,但它让 CA 很高兴。

于 2013-10-11T19:32:03.847 回答