Bonjour,
J'ai grand besoin d'aide!
Voilà le problème:
Je code un composant non graphique<----!!!! Ce composant ne doit pas être lié par n'importe quel moyen aux controls.
Ce composant est multithreadé. Je lance des threads depuis le thread principal.
Ces threads provoquent des évènements.
Comment fait on pour que le thread principal transfert ces évènements à l'application qui utilise le composant sans tomber dans le problème du code unsafe?
J'ai déjà fait un test de mon composant sur une appli console. Pas de problème, les threads génèrent des évènements qui sont très bien gérer pas la suite.
Je teste avec une WinForm. Gros souci lorsque je fait un traitement sur les control de la Winform! L'erreur étant que le code de l'évènement essaye de modifier un control à partir d'un thread autre que celui qu'il l'a créé.
Il existe une parade facile qui est d'utiliser la méthode Invoke du control dans le code de la winform. Cepandant, je voudrais que le multithreading de mon composant passe totalement inaperçu pour un utilisateur. Donc le Invoke doit se faire au niveau de mon composant. Or il n'existe pas de méthode Invoke() dans la classe Component. Une solution facile serait alors de changer Component en Control. Mais ça fait pas propre.
Résumer:
En gros, y a-t-il un moyen de recodé une méthode invoke c'est à dire faire une méthode qui permette depuis un thread secondaire de forcer le thread principale à executé une fonction (en l'occurence lancer un évènement).
Si vous avez une solution, n'hésitez pas à mettre un code complet qui marche.
Partager