Hello,

Ma question porte sur les options disponibles sachant que je suis peut être passé à coté de quelque chose.

Mon programme est composé d'une fenêtre qui lance deux tâches en asynchrone avec Task.

- Une de ces tâche surveille des dossiers et fichiers, et enregistre les évènements dans un fichier , ainsi que dans une list de classe "d'évènements" maison. (En gros je consigne pour un post traitement les données recueillies déclenché par la première tâche)
- L'autre tâche va donc traiter ça
- Enfin la fenêtre elle est toujours disponible en revanche, avec la possibilité de mettre à jour des informations par les deux tâches, mais aussi de modifier la configuration à la volée, l'enregistrer etc etc.

Mon soucis c'est donc de faire communiquer les deux sous tâches avec des controls de ma fenêtre principale, m'étant documenté, j'utilise un système avec:
- un délégué dans la fenêtre
- La fonction qui met à jour le formulaire avec "invoke"
- Je passe quand j'envoie mes tâches, mes fonctions et de l'autre coté c'est repassé en objet type délégué que j'appelle quand j'ai besoin donc de mettre à jour.

exemple avec une partie de la fenêtre principale (fonction qui aurait du servir à récupérer un control personnalisé crée à la volée et utilisé par une des tâches):
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 
       delegate void AsyncAddForm( SumViz cs );
 
 
        public void addForm(SumViz cs)
        {
            if (tableLPBotSurv.InvokeRequired)
            {
                AsyncAddForm asForm = new AsyncAddForm( addForm );
                Invoke( asForm, new object[] { cs });
            }
            else
            {
                tableLPBotSurv.Controls.Add(cs, 3,0);
            }
        }
Mais... Et bien j'ai pas mal de trucs à passer et ça me plait pas en fait, du moins faire un () => latacheasync(fonction1, fonction2,...., fonction X) ça m'emballe pas des masses.



- J'ai essayé de créer un controle dynamique et en fait de l'envoyer via un délégué là ou je voulais mais apparemment ça change rien, il est considéré comme ayant été créé dans la fenêtre principale (zut sac en papier).. Je m'étais dit que de détacher totalement un controle ça serait pratique sauf qu'apparemment c'est pas comme ça qu'on peut.
- Je me suis dit que ma sous tache/bot pourrait créer sa propre Form, mais si c'est en modal ça bloque (logique) et si c'est pas en modal le contenu ne de dessine pas (j'ai peut être rapé un truc), peut être que je devrais lancer les 3 fenêtes à partir de Program.cs en ce cas ? Au lieu de n'en lancer qu'une ?
- Reste la dernière solution mais je préfère demander car c'est peut être pas une bonne habitude d'autant que c'est assez old school... C'est un pipe entre chaque tâche et la fenêtre principale, et une boucle qui traite ce qui arrive... Ce pipe verrait circuler donc en fonctionnement comme une pile un conteneur avec l'ordre, et les paramètres. Et dans la fenêtre principale lancer un handler qui gèrera ça.


Si vous avez d'autres solutions je suis preneur.

Cordialement.