Envoyé par
SirJulio
Salut Levalp,
pour etre plus explicite, vu qu'une DLL ne peut, structurellement, pas etre demarré (executé), c'est forcement un exe (console, windows whatever) qui va l'appeler. De fait, la problematique de threading est reporté vers cette assembly tierce (qui appelle, et comment ?). Simplifions le cas à l'"extreme :
-j'ai un exe console qui appelle des methodes de ma DLL.
-une DLL avec des methodes
si j'appelle ma methode de ma DLL en la threadant depuis mon appli alors l'appel se fera sur un thread tiers (poolé ou non). A contrario, si j'appelle ma methode directement, l'appel se fera sur le thread ayant demarré mon appli (qu'on pourrait appeler le thread principal).
Que ta DLL contienne ou non un main ne change pas le probleme (une dll peut avoir un main ce n'est pas interdit juste inutile), un assembly compilé en /out:Library (donc ce qu'on appelle une DLL) ne peut pas etre demarré, il sera juste parcouru par les autres assemblies faisant des appels dessus.
Pour le Datareceived, je ne sais pas trop comment ca marche, mais j'imagine que tu dois initialiser la classe et la classe emet des events (datareceived ici) quand elle entends quelque chose. Les callbacks de ces events seront executés par un thread du pool (au meme titre qu'un timer si tu veux, tu init un timer les callback d'elapsed sont levés par un thread tiers).
Bref, dans une DLL, si cette derniere ne créé pas explicitement de thread (new thread blabla) ou implicitement (le datareceived par exemple, mais aussi des methodes async quelconque), la problematique du thread est reporté vers l'appelant.
En esperant avoir ete plus clair. =)