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 :

[WPF] GUI et process


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 14
    Par défaut [WPF] GUI et process
    Bonjour à tous et à toutes,
    j'ai développé un petit wrapper .NET pour ffmpeg.

    Cependant, j'ai un énorme problème :

    si je reste en mode console, le programme fonctionne parfaitement, la mise à jour de la conversion / extraction de la piste audio s'affiche correctement.

    Cependant, si je quitte le mode console pour une GUI et que j'affiche une boite de dialogue avec une barre de progression, la GUI "plante" puisqu'elle n'affiche pas la progression de l'extraction et aucun bouton de l'UI ne répond au clic souris et ce même si le process a terminé son exécution.

    Comment puis-je exécuter le process et mettre à jour la barre de progression sans que l'UI se fige ?

    Vous pouvez trouver l'exemple d'utilisation en GUI et console ici

    En vous remerciant des réponses que vous pourrez apporter ...

  2. #2
    Membre Expert Avatar de meziantou
    Homme Profil pro
    autre
    Inscrit en
    Avril 2010
    Messages
    1 223
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : autre
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2010
    Messages : 1 223
    Par défaut
    Il faut que tu passes par des Thread. Si tu as besoin de mettre à jour l'UI depuis un thread autre que le principal il faut utiliser le Dispatcher.

  3. #3
    Membre Expert
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    2 210
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 210
    Par défaut
    Le BackgroundWorker permet d'effectuer un traitement dans un thread séparé tout en donnant la possibilité de notifier l'interface.

    C'est un composant conçu pour ton genre de besoin.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 14
    Par défaut
    Oui, j'y ai pensé, j'avais d'abord lancé le process dans un background worker, mais apparemment, pour que le travail se passe correctement, je dois utiliser la méthode WaitForExit du process, mais en utilisant un thread ou un background worker, cette méthode "fout la zone", car elle renvoit de suite sans effectuer aucun travail. Alors que si je n'utilise pas WaitForExit, le travail n'est jamais accomplit, et ce avec un thread, un background worker ou sans rien.

    Avez-vous regardé l'exemple proposé ?

    La méthode se situe dans la classe FFMPegCommands de l'assembly FFMPEG.NET et la méthode nécessaire se nomme ExecuteFFMpegCommand.

    Nota : une extraction / conversion ne peut s'effectuer que si on fait un GetFileInfo avant pour récupérer les infos sur le fichier.

  5. #5
    Membre Expert
    Avatar de GuruuMeditation
    Homme Profil pro
    .Net Architect
    Inscrit en
    Octobre 2010
    Messages
    1 705
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Belgique

    Informations professionnelles :
    Activité : .Net Architect
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 705
    Par défaut
    Le programme n'est pas du tout adapté pour de l'asynchrone, ça va demander un travail de redesign.

    En utilisant la géniale TPL, il y a moyen de le faire sans trop de problèmes je pense.
    En changeant dans le button_click l'appel aux commandes par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     var filename = txtFile.Text;
    Task.Factory.StartNew(() => commands.GetFileInfo(filename)).ContinueWith((y) =>
    {                                                                                                 commands.ExtractWMA(filename,withoutExt.Insert(withoutExt.Length,".wma"), true);
    }
    On voit que le GUI répond bien. Bon, il faut gérér les exceptions, l'annulation,etc...

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 14
    Par défaut
    En effet, j'ai essayé la technique de la taskfactory hier soir et ça marche bien. Je vais donc créer deux classes spécifiques :
    - celle que j'ai donné par défaut pour le mode console (oui, j'en connais encore qui ne jurent que par le mode console).
    - une nouvelle classe qui sera spécialement conçu pour la gestion d'une GUI.

    Sujet résolu pour l'heure.

    Merci à ceux qui ont répondus.

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

Discussions similaires

  1. Wpf/C# Bloquer interaction GUI pendant animation
    Par gomezmic dans le forum Windows Presentation Foundation
    Réponses: 7
    Dernier message: 17/02/2010, 17h04
  2. Service Windows, GUI et Process :D
    Par Tamahome dans le forum Windows Forms
    Réponses: 3
    Dernier message: 07/05/2008, 15h49
  3. Gestion des process
    Par Oswald dans le forum C
    Réponses: 3
    Dernier message: 29/08/2003, 11h52
  4. Réponses: 4
    Dernier message: 01/07/2003, 15h47
  5. [DOM] Ajout d'une instrution de processing
    Par corwin_d_ambre dans le forum Format d'échange (XML, JSON...)
    Réponses: 9
    Dernier message: 06/05/2003, 11h51

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