Ошибка, показанная на следующем снимке экрана, возникает спорадически:
Само приложение находится в неуправляемом C ++ с использованием объектов COM и .NETобъекты (в C # и VB) через COM-взаимодействие.
В нашем коде есть только две функции из трассировки стека
McWrapperControl.ControlHost.InvokeMethod
Public Sub InvokeMethod(ByVal Member As String, ByVal NumArgs As Integer, ByVal Args As Object)
Try
Dim ArgsType As Type = Args.GetType()
Dim ArgsArray As Object
If NumArgs = 0 Then
ArgsArray = Nothing
ElseIf ArgsType.IsArray Then
ArgsArray = Args
Else
ArgsArray = {Args}
End If
InvokeMethod_ArgsArray(Member, ArgsArray)
Catch ex As Exception
ReportError.ShowErrorDialog(ex, "")
End Try
End Sub
и McWrapperControl.ControlHost.InvokeMethod_ArgsArray
Public Sub InvokeMethod_ArgsArray(ByVal Member As String, ByVal ArgsArray As Object)
Try
Dim Target As Object = ContainedControl()
If Target IsNot Nothing Then
Dim TargetType As Type = Target.GetType()
TargetType.InvokeMember(Member, BindingFlags.InvokeMethod, Nothing, Target, ArgsArray)
End If
Catch ex As MissingMethodException
'Ignore this error
Catch ex As Exception
ReportError.ShowErrorDialog(ex, "")
End Try
End Sub
В этом случае я вполне уверен, что возникает исключение MissingMethodException, но это следует перехватить и проигнорировать. Очевидно, я мог бы предотвратить эту ошибку, проверив существование именованного метода, прежде чем пытаться вызвать его.
Кроме этого, кто-нибудь может объяснить, что может вызвать эту рекурсию?