我有两个类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
答案 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