J'ai une classe bMainframe qui gère les connexions à 4 mainframes différents. Il permet d'ouvrir la même bibliothèque sous-jacente sous-jacente de manière spécifique et de connecter plus d'un ordinateur central à la fois. Chaque bibliothèque possède son propre code de mise au rebut pour la ressource de connexion mainframe non managée. L'encapsuleur possède également un code qui appelle le code de mise au rebut de la connexion mainframe individuelle.Puis-je disposer de ces ressources non gérées sans nécessiter de référence à chacune?
Cela provoque une erreur si le projet de quelqu'un n'utilise pas les 4 unités centrales, mais appelle la mise au rebut sur le wrapper. (FileLoadException n'a pas pu charger l'assembly X des 4 mainframes gérés) Depuis ce code de disposition vérifie lequel des 4 n'est pas nothing/null. Même si rien/null cela provoque .net pour essayer de charger l'assembly et se bloquer.
Le code d'élimination dans l'emballage extérieur est-il utile ou nécessaire? est-il un moyen de vérifier si l'assembly pour un type est même chargé qui ne déclenche pas.net pour charger le type/assembly?
J'ai modifié le code ci-dessous pour bloquer l'exception fileload, mais je ne crois pas que ce soit la meilleure solution.
Protected Overridable Sub Dispose(ByVal disposing As Boolean)
If Not Me.disposedValue Then
If disposing Then
' TODO: free managed resources when explicitly called
End If
Try
If Me._Linx IsNot Nothing Then
If _Linx.cnLinx IsNot Nothing Then
Try
_Linx.Disconnect()
Catch ex As Exception
Trace.WriteLine("Error doing linx.disconnectSession")
End Try
Try
_Linx.Dispose()
Catch ex As Exception
Trace.WriteLine("Error doing linx.dispose")
End Try
End If
End If
Catch ex As IO.FileLoadException
Debug.WriteLine("Failed to load LinxFile")
End Try
Try
If Me._Acaps IsNot Nothing Then
_Acaps.Disconnect()
_Acaps.Dispose()
End If
Catch ex As IO.FileLoadException
Debug.WriteLine("Failed to load AcapsFile")
End Try
Try
If Me._Dart IsNot Nothing Then
Try
_Dart.Dispose()
Catch ex As Exception
Trace.WriteLine("Error disposing of Dart")
End Try
End If
Catch ex As IO.FileLoadException
Debug.WriteLine("Failed to load DartFile")
End Try
Try
If LpsOpen Then
Try
_Lps.Dispose()
Catch ex As Exception
Trace.WriteLine("Error disposing of Lps")
End Try
End If
Catch ex As IO.FileLoadException
Debug.WriteLine("Failed to load LpsFile")
End Try
' TODO: free shared unmanaged resources
End If
Me.disposedValue = True
End Sub