Background Worker, la bonne solution ? Car ne fonctionne pas
Résolu/Fermé
Raphy5959
Messages postés
2
Date d'inscription
mercredi 19 octobre 2016
Statut
Membre
Dernière intervention
20 octobre 2016
-
19 oct. 2016 à 22:07
Raphy5959 Messages postés 2 Date d'inscription mercredi 19 octobre 2016 Statut Membre Dernière intervention 20 octobre 2016 - 20 oct. 2016 à 19:05
Raphy5959 Messages postés 2 Date d'inscription mercredi 19 octobre 2016 Statut Membre Dernière intervention 20 octobre 2016 - 20 oct. 2016 à 19:05
A voir également:
- Background Worker, la bonne solution ? Car ne fonctionne pas
- Pack solution - Télécharger - Divers Utilitaires
- Mots entre amis messenger solution ✓ - Forum jeux en ligne
- Island questaway solution français - Forum Jeux vidéo
- Mots entre amis solution - Forum jeux en ligne
- Background remover - Télécharger - Montage photo
2 réponses
Whismeril
Messages postés
19026
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
20 avril 2024
931
19 oct. 2016 à 23:09
19 oct. 2016 à 23:09
Bonjour
ton problème n'a rien a voir avec le backgroundWorker.
Un formulaire est un objet comme un autre, tu peux en initialiser autant que tu veux, après il faut parler avec la bonne instance.
Si tu gardes cette architecture, il faut soit que tu passes en paramètre à ta classe Background_Worker la référence du bon Form1, soit émettre un évènement auquel tu auras abonné Form1. Voir ici https://codes-sources.commentcamarche.net/faq/11107-interactions-entre-form-en-net-c-et-vb-net
Mais pour le coup, tu te compliques bien la vie.
Un backgroundworker pour tester un résultat toutes les secondes c'est un peu lourd (sauf si le traitement de check() prend plus d'une 1/2 seconde). Et quand bien même tu veux faire un thread à part, tu pouvais le laisser dans le Form pour le peu qu'il fait....
Mais même dans le Form, c'est encore trop, un simple timer suffit.
C'est un type d'objets (en winforms c'est un contrôle) qui va générer un évènement à un intervalle définit, une fois qu'on l'a mis en route (pour celui de winform je ne sais plus si c'est Tick, ou Elapsed à vérifier), la méthode que tu abonnes à cette événement sera donc exécutée de façon régulière et sans figer le rester de ton Form. Tu y mets un truc de ce type
ton problème n'a rien a voir avec le backgroundWorker.
private void bw_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) { Form1 form = new Form1();// ici tu initialises une nouvelle instance de form1, c'est donc la méthode save de cette nouvelle instance qui va être exécutée et pas la méthode save de l'instance ou tu as tes données. form.save2(); }
Un formulaire est un objet comme un autre, tu peux en initialiser autant que tu veux, après il faut parler avec la bonne instance.
Si tu gardes cette architecture, il faut soit que tu passes en paramètre à ta classe Background_Worker la référence du bon Form1, soit émettre un évènement auquel tu auras abonné Form1. Voir ici https://codes-sources.commentcamarche.net/faq/11107-interactions-entre-form-en-net-c-et-vb-net
Mais pour le coup, tu te compliques bien la vie.
Un backgroundworker pour tester un résultat toutes les secondes c'est un peu lourd (sauf si le traitement de check() prend plus d'une 1/2 seconde). Et quand bien même tu veux faire un thread à part, tu pouvais le laisser dans le Form pour le peu qu'il fait....
Mais même dans le Form, c'est encore trop, un simple timer suffit.
C'est un type d'objets (en winforms c'est un contrôle) qui va générer un évènement à un intervalle définit, une fois qu'on l'a mis en route (pour celui de winform je ne sais plus si c'est Tick, ou Elapsed à vérifier), la méthode que tu abonnes à cette événement sera donc exécutée de façon régulière et sans figer le rester de ton Form. Tu y mets un truc de ce type
if (Check()) { monTimer.Stop();//ou (Is)Enabled = false selon les timers save(); }
Raphy5959
Messages postés
2
Date d'inscription
mercredi 19 octobre 2016
Statut
Membre
Dernière intervention
20 octobre 2016
20 oct. 2016 à 19:05
20 oct. 2016 à 19:05
Bonjour et merci pour ta réponse :)
Finalement j'ai copier/coller bon BW directement dans la même classe que mon form1, au moins je fait appel a la fonction directement en tapant simplement save2();
mais c'est vrai que cela semble beaucoup plus facile avec un timer! Je vais regarder ça car cela ferai du ménage dans mon code, et peut être également que sa consomme moins de ressource :)
Merci beaucoup pour ta réponse :)
Finalement j'ai copier/coller bon BW directement dans la même classe que mon form1, au moins je fait appel a la fonction directement en tapant simplement save2();
mais c'est vrai que cela semble beaucoup plus facile avec un timer! Je vais regarder ça car cela ferai du ménage dans mon code, et peut être également que sa consomme moins de ressource :)
Merci beaucoup pour ta réponse :)