objets et threads

objets et threads - C#/.NET managed - Programmation

Marsh Posté le 08-10-2008 à 16:34:46    

Bonjour, je débute dans le langage C#
J'ai un problème avec un thread qui  ne veut pas accéder à une classe qui a été créé par son processus père.
Voici le schema (le point de départ est dans la classe 'Ailleur'

Code :
  1. class A
  2. {
  3.   public B objetB = null; // peut importe la définition de B. (je ne la connais pas)
  4.   public Thread thread = null;
  5.   public A()
  6.   {
  7.     objetB = new B();
  8.     objetB.unefonction(); // Pas de problème
  9.   }
  10.   public bool start()
  11.   {
  12.     thread = new Thread(new ThreadStart(this.loop));
  13.     thread.start();
  14.   }
  15.   public void loop()
  16.   {
  17.     objetB.unefonction(); // Exception parlant de problème de cast d'un objet COM en une interface
  18.   }
  19. }
  20. class Ailleurs
  21. {
  22.   public myrun() // ici, c'est le thread principale
  23.   {
  24.     A objetA = new A();
  25.     A.start();
  26.   }
  27. }


 
quelq'un peut m'expliquer ??

Reply

Marsh Posté le 08-10-2008 à 16:34:46   

Reply

Marsh Posté le 08-10-2008 à 18:45:33    

oui c'est tout à fait normal.
Depuis .NET 2.0, un thread ne peut pas accéder au objet créer par un autre processus sous peine de se ramasser une exception "Cross Thread" machin.  
Pas le choix, pour contourner ce problème, faut passer par des delegate.


---------------
quand un homme raisonne mal c'est qu'il n'a pas les données pour raisonner mieux (diderot)
Reply

Marsh Posté le 08-10-2008 à 22:07:50    

hmm... J'ai pourtant fait un delegate.. ca n'a rien changé.
 
D'ailleurs, l'exception n'a rien à voir avec un Cross thread.
L'exception me dit qu'il essai de caster un Composant COM 'machin.truc.BiduleClass' en interface 'machin.truc.BiduleClass' ..
 
C'est un librairie dont je n'ai pas les sources. Ma class que j'essai d'utiliser peut être un composant COM  ?
 
Mais, je sais que le problème vient des thread, car, sans thread, ca passe.
 
Moi qui vient de la programmation unix, j'ai du mal à comprendre la notion de thread sous windows qui n'est pas la même que sous unix. Les thread windows ont l'air plus proche d'un fork (mais pas complètement) qu'un thread unix..

Reply

Marsh Posté le 10-10-2008 à 19:57:38    

la notion de thread sous Windows est la même que celle en UNIX. Il s'agit d'une instance d'exécution s'exécutant dans le même processus (comme un UNIX). Le fork est le démarrage d'un second processus.  
 
Maintenant, ton objet COM, il fait quoi exactement? Le problème vient peut être de la aussi, il ne supporte peux être pas une exécution dans un Thread.


---------------
quand un homme raisonne mal c'est qu'il n'a pas les données pour raisonner mieux (diderot)
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed