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 :

Débutant : Comment afficher un texte pendant une recherche récursive?


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 6
    Par défaut Débutant : Comment afficher un texte pendant une recherche récursive?
    Toutes mes excuses pour le message précédent tronqué.
    Dans un programme C# utilisant WPF:
    J'ai une méthode appelée "resolution" , lancée par un menu, qui recherche de façon récursive la solution à un problème.
    Cette recherche durant quelques minutes, je souhaite pendant celle-ci afficher un texte "recherche en cours".
    J'ai tout simplement posé un label invisible contenant le texte, et je pensais facile de le rendre visible pendant la recherche:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    private void MenuResoudre_Click(object sender, RoutedEventArgs e)
    {
    label3.Visibility = Visibility.Visible;
    resolution();
    }
     
    private void resolution()
    { 
    // algorithme récursif
    }
    Or le label ne devient pas visible quand on lance la recherche en cliquant sur menu, mais il attend pour devenir visible , que la méthode résolution soit terminée !!
    Comment faire simplement, sans passer par le multithreading ?

  2. #2
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 528
    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 528
    Par défaut
    Comment faire simplement
    Avec le multithreading.
    C'est vraiment mais vraiment très simple dans ce cas de figure.
    Vous lancez un thread qui appel la méthode "resolution" vous déclencher un évènement à la fin de la méthode et c'est tout.

  3. #3
    Membre expérimenté
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Par défaut
    Salut

    Je n'ai pas encore d'experience en WPF mais en winform, simplement en faisant un refresh de ta form ou de ton label avant de lancer resolution !!

  4. #4
    Membre chevronné Avatar de MetalGeek
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 412
    Par défaut
    Salut,
    essaie d'appeler la méthode UpdateLayout() de ton contrôle.

  5. #5
    Membre éclairé Avatar de loulouklm
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    99
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 99
    Par défaut
    As-tu essayé un DoEvents entre les deux ?

    Le DoEvents n'existe plus en WPF, mais il y a des équivalents :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    // Code equivalent de l'Application.DoEvents()
    Application.Current.Dispatcher.Invoke(System.Windows.Threading.DispatcherPriority.Background, new ThreadStart(delegate { }));

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 6
    Par défaut Merci
    Merci beaucoup à tous des réponses. Je suis passé effectivement par le multithreading, qui n'est finalement pas si compliqué (après une heure d'exercices dans tous les sens sur la console). C'est même assez magique!! Ca marche très bien, sauf que maintenant, je tombe sur une autre difficulté: la mise à jour de l'interface graphique qui est impossible à partir d'un thread autre que le principal. Du coup, j'essaie de comprendre la méthode Dispatcher.Invoke . Pas très simple, mais ça avance... Finalement, à partir d'un petit problème d'affichage, j'aurai beaucoup appris... A la prochaine

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

Discussions similaires

  1. Comment afficher un texte d'une base de données
    Par Anonyme5571 dans le forum NodeJS
    Réponses: 2
    Dernier message: 06/02/2015, 16h53
  2. Comment afficher un texte dans une div au survol d'un lien menu ?
    Par ryohazuki100 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 07/12/2014, 13h38
  3. [Débutant] comment afficher un text dans une form
    Par frederic_lh dans le forum VB.NET
    Réponses: 2
    Dernier message: 04/03/2010, 20h10
  4. Réponses: 4
    Dernier message: 08/05/2006, 20h12
  5. Réponses: 1
    Dernier message: 17/02/2006, 19h18

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