回应具有给定信息的事件

时间:2015-09-18 11:53:41

标签: vb.net

我有两个类Receiver和Parser。在解析器类中,有一个名为Run的方法。在此方法中是特定的xml解析引擎,并且在每个步骤中都可能发生一些错误。因此,如果发生这种情况,我想不要错误的类型,并进一步停止处理。还有Receiver类正在调用解析器并订阅它的错误事件。我想要做的是 - 如果Parser抛出错误,那么此时将发出有关错误信息的事件。然后将通知Receiver类发生错误并依赖于错误Receiver应该将自定义信息发送回解析器该做什么,而且我不知道该怎么做 - 请参阅Receiver类中的注释:

  

“向当前运行的PARSER发送特定信息 - 运行方法是什么   在这种情况下要做“

我想在那一刻是在Receiver类中实现事件,然后基于select的Receiver可以触发此事件,Parser可以订阅它。但我不确定是否正确。

从模块运行:

 Dim aa As New Receiver
        aa.Go()

接收者类:

Public Class Receiver

    Public WithEvents parser As New Parser

    Public Sub ParserDoJob(ByVal sender As Object, ByVal e As StartEventArgs) Handles parser.Start

        Dim error_type As ErrorT

        Select Case error_type
            Case e._error_type.OnlyMainNodeWithoutAnyFields

                'SEND SPECIFIC INFORMATION TO CURRENT RUNNING PARSER - RUN METHOD WHAT TO DO IN THIS CASE

            Case e._error_type.MoreFieldsThanSpecified


                'SEND SPECIFIC INFORMATION TO CURRENT RUNNING PARSER - RUN METHOD WHAT TO DO IN THIS CASE

            Case e._error_type.LessFieldsThanSpecified


                'SEND SPECIFIC INFORMATION TO CURRENT RUNNING PARSER - RUN METHOD WHAT TO DO IN THIS CASE

            Case Else

        End Select


    End Sub


    Public Sub Go()
        parser.Run()
    End Sub

End Class

Parser class:

Imports System.ComponentModel
Imports System.Xml

Public Class Parser




    Public Event Start(ByVal sender As Object, ByVal e As StartEventArgs)

    Protected Overridable Sub OnStart(ByVal e As StartEventArgs)
        RaiseEvent Start(Me, e)
    End Sub


    Public Sub Run()
...
 ElseIf FieldsFound_count = 0
                            OnStart(New StartEventArgs(ErrorT.OnlyMainNodeWithoutAnyFields))            

                        ElseIf dictionary_count < FieldsFound_count
                            OnStart(New StartEventArgs(ErrorT.MoreFieldsThanSpecified))     


                            found_error = True
                        ElseIf dictionary_count > FieldsFound_count
                            OnStart(New StartEventArgs(ErrorT.LessFieldsThanSpecified)) 
...

自定义事件类:

Public Class StartEventArgs
    Inherits System.EventArgs

    Property _error_type As ErrorT

    Sub New(error_type As ErrorT)
        _error_type = error_type
    End Sub

End Class

1 个答案:

答案 0 :(得分:0)

从您的代码中,我看不到Student Names Address John 33 King st. 被调用的位置。我可能采取不同的方法。由于您正在尝试处理可能的错误,请将ParserDoJob包装在Try / Catch块中 - 这将捕获您将定义的特定异常。然后,在parser.Run类中,定义可以调用的方法来处理这些异常。

Parser

这是我使用的Exception类的一个示例 - 重命名字段,因为它们可能适合您。

Public Sub Go()
    Try
        parser.Run()
    Catch ex as OnlyMainNodeWithoutAnyFieldsException
        parser.HandleOnlyMainNodeWithoutAnyFields(.....)
    Catch ex2 as MoreFieldsThanSpecifiedException
        parser.HandleMoreFieldsThanSpecified(.....)
    Catch ex3 as LessFieldsThanSpecifiedException
        parser.HandleLessFieldsThanSpecified(.....)

End Sub