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:
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();
Mais j'obtiens une erreur:
Les contrôles créés sur un thread ne peuvent pas être parents d'un contrôle d'un autre thread
Ou alors:

[...] fait l'objet d'un accès à partir d'un thread autre que celui sur lequel il a été créé.
Et parfois ca fonctionne très bien... :/ c'est aléatoire.

Alors j'ai essayé de le faire avec un backgroundWorker, je l'ajoute à ma Form puis je fais:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
backgroundWorkerServeur.RunWorkerAsync(b = Serveur.TestStatut());
Mais là il ne l'exécute même pas en tâche de fond :/

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