"La référence d'objet n'est pas définie à une instance d'un objet." grrrrrrr
11 réponses
Davide
Bonjour,
Je travaille sur un petit projet en C#. J'utilise un thread dans une
classe personnalisée qui scrute un NetworkStream et déclenche un
évènement (suivant le message reçu) que je gère dans la classe
principale (WinForm). J'utilise donc mes délégués dans ma classe
principale pour gérer les évènements de mon thread qui rajoute des
éléments dans un treeview.
Mon problème est que j'obtiens constamment cette erreur:
"La référence d'objet n'est pas définie à une instance d'un objet."
Dans le fonction qui gère l'évènement j'utilise donc la méthode
begininvoke.. mais ca ne change rien.. :'(
Je ne vois pas trop d'où vient le problème.. si vous pouvez m'aider à y
voir un peu plus clair..
Je vous remercie.. :-)
Le Mon, 19 Jul 2004 09:00:52 +0200, "c2i-Richard Clark [MVP]" a écrit :
Il y a un truc qui me gêne dans le code ci-dessous. Tu fais de l'asynchrone hors dans la méthode appelée dans le thread non principal, tu fais une itération sur les nodes d'un treeview (qui ne sont pas thread safe).
NB Bis : si il y a un quelconque appel du Networkstream quelque part, faut vérifier qu'il ne travaille pas lui aussi en asynchrone (et un appel asynchrone dans une méthode déjà appelée en asynchrone, comme dirais l'autre : c'est pas bien ;-)), car tu pourrais alors avoir des pbs de blocage.
Merci de ta réponse. J'ai effectivement un NetworkStream qui tourne dans le thread qui envoie les évènements. Seulement, ce NetworkStream est utilisé uniquement au début du while(true) pour récupérer les commandes envoyées qui sont filtrées (je penserai à mettre un switch à la place des if..) ce qui envoie l'évènement au thread principal. Mais est-ce possible de bloquer le thread ( NetworkStream ) jusqu'à ce que l'évènement à terminé son boulot dans le thread principal..?
Quoi qu'il en soit je vais me renseigner sur les thread safe..
Merci à toi
Davide
Le Mon, 19 Jul 2004 09:00:52 +0200, "c2i-Richard Clark [MVP]"
<rc@c2i.online.fr> a écrit :
Il y a un truc qui me gêne dans le code ci-dessous. Tu fais de l'asynchrone
hors dans la méthode appelée dans le thread non principal, tu fais une
itération sur les nodes d'un treeview (qui ne sont pas thread safe).
NB Bis : si il y a un quelconque appel du Networkstream quelque part, faut
vérifier qu'il ne travaille pas lui aussi en asynchrone (et un appel
asynchrone dans une méthode déjà appelée en asynchrone, comme dirais l'autre
: c'est pas bien ;-)), car tu pourrais alors avoir des pbs de blocage.
Merci de ta réponse.
J'ai effectivement un NetworkStream qui tourne dans le thread qui
envoie les évènements.
Seulement, ce NetworkStream est utilisé uniquement au début du
while(true) pour récupérer les commandes envoyées qui sont filtrées
(je penserai à mettre un switch à la place des if..) ce qui envoie
l'évènement au thread principal. Mais est-ce possible de bloquer le
thread ( NetworkStream ) jusqu'à ce que l'évènement à terminé son
boulot dans le thread principal..?
Quoi qu'il en soit je vais me renseigner sur les thread safe..
Le Mon, 19 Jul 2004 09:00:52 +0200, "c2i-Richard Clark [MVP]" a écrit :
Il y a un truc qui me gêne dans le code ci-dessous. Tu fais de l'asynchrone hors dans la méthode appelée dans le thread non principal, tu fais une itération sur les nodes d'un treeview (qui ne sont pas thread safe).
NB Bis : si il y a un quelconque appel du Networkstream quelque part, faut vérifier qu'il ne travaille pas lui aussi en asynchrone (et un appel asynchrone dans une méthode déjà appelée en asynchrone, comme dirais l'autre : c'est pas bien ;-)), car tu pourrais alors avoir des pbs de blocage.
Merci de ta réponse. J'ai effectivement un NetworkStream qui tourne dans le thread qui envoie les évènements. Seulement, ce NetworkStream est utilisé uniquement au début du while(true) pour récupérer les commandes envoyées qui sont filtrées (je penserai à mettre un switch à la place des if..) ce qui envoie l'évènement au thread principal. Mais est-ce possible de bloquer le thread ( NetworkStream ) jusqu'à ce que l'évènement à terminé son boulot dans le thread principal..?
Quoi qu'il en soit je vais me renseigner sur les thread safe..