Environnement: .NET Programme contenant plusieurs DLL/assemblys de code géré + natif. La première action effectuée par le programme consiste à créer une instance d'une classe (disons classA) héritée de MarshalByRefObject, dans un espace de noms (disons namespaceA).Application d'une instance commune de variables statiques à tous les threads lors de l'exécution dans le contexte de appDomain
actions effectuées dans le cadre du constructeur CLASSA:
- Alloue nouvelle classe (par exemple ClassB). classB contient des variables statiques.
- Créer des fils. La création réelle des threads est effectuée dans le contexte du code natif en appelant la fonction 'WinBase' 'CreateThread'.
Problème: Lors de la définition d'une instance de CLASSA dans le contexte de appdomain, ClassB variables statiques ne sont pas communs à toutes les discussions.
Le code utilisé pour charger les dll programmes et créer une instance de CLASSA au sein appdomain:
System.AppDomain app_domain = System.AppDomain.CreateDomain("app domain");
object winfw_host = app_domain.CreateInstanceFromAndUnwrap(@"C:\...\dll_name.dll", "namespaceA.classA");
Note: Lors de la définition d'une instance de CLASSA pas dans le contexte de appdomain, les variables statiques ClassB sont communs à tous les threads.
Question:
Je me serais attendu à même comportement (AppDomain et contexte non AppDomain), quelle est la raison de la différence?
Est-il possible d'appliquer une instance commune de variables statiques à tous les threads lors de l'exécution dans le contexte de appDomain?
Le deuxième paramètre de la méthode "SetData" doit être soit un type de valeur, soit un type héritant de la classe MarshalByRefObject. –