IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Rafraîchir une form depuis un autre thread


Sujet :

C#

  1. #1
    Membre confirmé
    Inscrit en
    Juin 2008
    Messages
    73
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 73
    Par défaut Rafraîchir une form depuis un autre thread
    Bonjour,

    Je travaille sur une application en C# qui utilise un thread pour récupérer périodiquement des données dans une base de données, puis j'utilise les windows form pour afficher les données récupérées. Je souhaiterais que le rafraîchissement de ma form principale soit déclenché lorsque la récupération de mes données est terminé. J'ai tenté d'utilisé un AutoResetEvent depuis le thread de récupération des données mais je n'arrive pas à le relié à ma form principale pour la rafraîchir lorsque mon événement est levé !!!!.

    Pourriez-vous m'aider ?
    D'avance merci pour vos réponses.

    Cdlt

  2. #2
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 489
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 489
    Par défaut
    Pourquoi ne pas passer par la méthode Invoke ?

    http://msdn.microsoft.com/en-us/library/zyzhdc6b.aspx

  3. #3
    Membre confirmé
    Inscrit en
    Juin 2008
    Messages
    73
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 73
    Par défaut
    Bonjour,

    Tout d'abord merci de votre réponse. Le problème est que la classe que j'ai créé pour récupérer les données en base (dans un autre thread que celui d'affichage) est créé avant la form d'affichage, afin que je puisse lors de la phase d'initialisation récupérer mes données avant de les afficher.

    N'y a-t'il pas un moyen de synchroniser mes thread avec des événements ?

    Cdlt.

  4. #4
    Membre Expert Avatar de Guulh
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Par défaut
    Tu mélanges beaucoup de choses Et ManualresetEvent n'a aucun lien avec les événements (au sens du mot-clé event de C#)
    En windows forms, il est impossible de modifier les contrôles graphiques ailleurs que dans le thread de la form qui les contient.

    Donc si, depuis un autre thread, tu veux mettre à jour ton UI, il te faut, comme te l'a suggéré bacelar, appeler la méthode Invoke de la form ; tu passes en paramètre de Invoke une méthode à exécuter, ainsi que ses paramètres, et voilà.

    Un façon clean de faire, avec séparation en couches et tout, est de faire lever des events par ta couche métier (ton objet d'accès aux données, dans ton cas) ; ensuite, dans ta form, tu abonnes des méthodes à ces events ; quand l'event est levé, la méthode en question est exécutée, mais dans le thread métier ; donc cette méthode doit passer par un invoke sur la form pour modifier les contrôles.

  5. #5
    Membre confirmé
    Inscrit en
    Juin 2008
    Messages
    73
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 73
    Par défaut
    Bonjour,

    Merci pour vos réponses.

    @Guul : oui c'est vrai que je mélange un peu ces notions d'événement (aveu d'un débutant en C# ).

    Finalement en relisant l'article du lien de "bacelar", j'ai pu me débrouiller pour rafraîchir ma Form principale en utilisant un Invoke.
    Dés que j'aurais un peu plus de temps je tenterais de séparer, comme tu le précises, la couche métier de l'interface, afin d'avoir une appli plus propre

    Encore merci pour vos réponses .
    A+

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Un control d'une forme sur un autre thread?
    Par Eric_M dans le forum VB.NET
    Réponses: 5
    Dernier message: 25/01/2011, 03h58
  2. Réponses: 17
    Dernier message: 15/04/2007, 12h28
  3. Réponses: 5
    Dernier message: 09/03/2007, 10h07
  4. Accéder au DataSet d'une form depuis une autre
    Par Lucien dans le forum Bases de données
    Réponses: 2
    Dernier message: 07/08/2006, 08h40
  5. Réponses: 3
    Dernier message: 16/01/2006, 16h02

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo