J'ai une classe C# qui utilise un composant COM en utilisant interop. Voici l'exemple de code:Obtention d'une exception COM lors de l'utilisation d'Interop dans une application .net
public class MyClass
{
MyCOMClass myObj=null;
try
{
myObj = new MyCOMClass();
for (int num = 0; num < myArr.Length; num++)
{
//Call a method on myObj and do some processing
}
}
catch(Exception ex)
{
//log exception
}
finally
{
if (myObj != null)
{
System.Runtime.InteropServices.Marshal.ReleaseComObject(myObj);
}
}
}
Ici, la boucle dure environ 150 fois. N L'exécution de ce code, dans le bloc catch, obtient une exception: "L'objet COM qui a été séparé de son RCW sous-jacent ne peut pas être utilisé."
J'ai essayé implémentant l'interface IDisposable puis écrire méthode Dispose:
public class MyClass: IDisposable
{
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(true);
}
protected virtual void Dispose(bool diposeMgdResources)
{
if (!this.disposed)
{
if (diposeMgdResources)
{
if (myObj != null)
{
System.Runtime.InteropServices.Marshal.ReleaseComObject(myObj);
}
}
this.disposed = true;
}
}
}
À partir du client, je l'appelle alors disposer sur cette classe comme: myClass.Dispose();
Mais, je reçois toujours la même exception ici. Qu'est-ce qui me manque?
Merci d'avoir lu.
Pourriez-vous coller '// Appeler une méthode sur myObj et faire du code de traitement? Ma première supposition est que l'objet est nettoyé quelque part là-bas. – Grzenio