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
- My sims ds solution ✓ - Forum Jeux vidéo
- Solution rébus image ✓ - Forum Loisirs / Divertissements
- Comment trouver la solution d'un rébus ✓ - Forum Loisirs / Divertissements
2 réponses
Utilisateur anonyme
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 :)