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.