Bonjour,
Ça à l'air d'être un problème courant et j'ai beau lire les tutos, je n'arrive pas à résoudre mon problème (je pense l'avoir compris, c'est déjà ça...).
En fait, j'ai une fonction pour tester l'état d'un serveur qui renvoie un booléen si il est disponible ou non.
De là je veux modifier des icônes des des labels d'un contrôle.
Pas compliqué donc..
Sauf que le timeout de ma fonction est assez long et j'aimerais le faire en tâche de fond pour ne pas figer ma form..
Du coup j'ai essayé ca:
Mais j'obtiens une erreur:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 Thread _threadStatusServer; _threadStatusServer = new Thread(new ThreadStart(status_server)); _threadStatusServer.Name = "ThreadStatutServeur"; _threadStatusServer.Start();
Ou alors:Les contrôles créés sur un thread ne peuvent pas être parents d'un contrôle d'un autre thread
Et parfois ca fonctionne très bien... :/ c'est aléatoire.[...] fait l'objet d'un accès à partir d'un thread autre que celui sur lequel il a été créé.
Alors j'ai essayé de le faire avec un backgroundWorker, je l'ajoute à ma Form puis je fais:
Mais là il ne l'exécute même pas en tâche de fond :/
Code : Sélectionner tout - Visualiser dans une fenêtre à part backgroundWorkerServeur.RunWorkerAsync(b = Serveur.TestStatut());
Ma fonction TestStatut est celle avec le timeout et la procédure status_serveur est celle qui appelle TestStatut et modifie les label et icônes.
Donc, d'après ce que j'ai compris, quand je fais mon thread, il n'aurait pas de parent (qui devrait être ma form?) donc il ne peut pas modifier les controles?
De là j'ai lu plein de tuto qui m'ont trop embrouillés avec des délégué et compagnie, c'est pour ca que je viens vous voir, pour avoir une version plus explicite et personnalisée de mon problème et peut-être une aide pour le résoudre
Merci d'avance à ceux qui me liront!
Cdlt
Partager