3 votes

Peut-on invoquer du code arbitraire lorsqu'un thread géré est terminé dans un AppDomain ?

Prenons l'exemple d'une bibliothèque de classes écrite en C# qui utilise des champs spécifiques aux threads pour certaines de ses classes. La bibliothèque de classes doit nettoyer les données lorsque le thread se termine.

namespace MySdk
{
  public class MyClass
  {
    [ThreadStatic]
    private static SomeData _data; 

    public static SomeData Data
    {
       get
       {
         if(_data == null)
         {
           _data = new SomeData();
         }
         return _data;
       }
    }

    public static void FreeSomeData()
    {
      // Release _data 
    }

    // some other useful data which uses _data

  }  
} 

Existe-t-il un moyen d'invoquer FreeSomeData chaque fois qu'un thread géré se termine dans l'AppDomain actuel ? En raison de la complexité des applications qui utilisent cette bibliothèque de classes, il peut être peu pratique d'appeler la méthode explicitement avant la fin d'un thread. Le code qui démarre les threads peut même ne pas savoir que cette bibliothèque de classes existe en raison des couches d'indirection.

En code natif, j'aurais fait cela en DllMain et a vérifié fdwReason pour le DLL_THREAD_DETACH .

J'apprécie beaucoup.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X