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 :

Probleme de raffraichissement fenetre lors d une execution DOS


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Mai 2002
    Messages : 47
    Par défaut Probleme de raffraichissement fenetre lors d une execution DOS
    Bonjour
    J'ai fais une petite appli C# WinForm.
    Lorsque l on clic sur un bouton je demarre un process dans une fenetre DOS (c'est pour lancer un vieux pgm je n'ai pas le choix).
    Le probleme c 'est que lorsque l'on deplace la fenetre DOS sur la fenetre principale, il y a un probleme d affichage (de rafraichissement la fenetre se redessine mal)
    Ci dessous le code pour le demarrage du process DOS
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    System.Diagnostics.Process proc = new System.Diagnostics.Process();
    proc.EnableRaisingEvents = false;
    proc.StartInfo.FileName = Environment.GetEnvironmentVariable(COMSPEC);
    proc.StartInfo.WorkingDirectory = rep;
    // pour faire un test cmd = "DIR & PAUSE"
    proc.StartInfo.Arguments = "/C " + cmd ; 
    proc.StartInfo.UseShellExecute = false;
    proc.Start();
    proc.WaitForExit();
    Si vous savez comment regler le PB
    A+

  2. #2
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 202
    Par défaut
    waitforexit est bloquant, donc normal que ton interface soit bloquée, vu que tu bloques le thread qui sert aussi au rafraichissement

    en lancant le process depuis un autre thread ca serait peut etre mieux
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Mai 2002
    Messages : 47
    Par défaut
    salut
    le probleme c est que si je supprime le WaitForExit l utilisateur peut relancer le traitement (fenetre dos) meme si le precedent n est pas termine
    ce qui faudrait c est pouvoir ouvrir la fenetre dos comme un fenetre nodal
    A+

  4. #4
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 202
    Par défaut
    vous manquez d'imagination

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    process.start
    addhandler process.exited, addressof fini  /// équivaut à process.exited += je crois
    buttonstart.enabled= false

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    private sub fini (sender, e)
      buttonstart.enabled= true
      /// supprimer la gestion de l'event au passage
    end sub

    c'est du vb.net mais ca doit se comprendre, dans le pire des cas il y a des traducteurs vb.net/c# sur le net


    je crois qu'il y a un booléen à setter avant le start pour lui dire de raise l'event exited
    sinon la fenetre en modale ca doit etre faisable, il y a quelques propriétés sur process
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  5. #5
    Membre actif
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    47
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Mai 2002
    Messages : 47
    Par défaut
    bonjour
    pour que ca fonctionne il faut ajouter un evenement "exit" au niveau du process
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    proc.Exited += new EventHandler(myProcess_Exited);
    et pour gere les boutons
    c'est pas en direct (on n est pas dans le meme processus)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
            private void myProcess_Exited(object sender, System.EventArgs e)
            {
                // on est dans un autre thread on ne peut pas changer l etat des boutons
                if (this.InvokeRequired)
                {
                    this.Invoke((Action)(() => ProcessExited()));
                    return;
                }
                ProcessExited();
            }
            // 
            private void ProcessExited()
            {
                this.button1.Visible = true;
                this.button2.Visible = true;
            }

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 25/06/2009, 15h54
  2. [debutant] Un probleme lors d'une execution
    Par doditch77 dans le forum Débuter
    Réponses: 4
    Dernier message: 05/01/2008, 13h01
  3. Petit probleme avec les Border lors d'une sauvegarde
    Par Mike888 dans le forum Interfaces Graphiques en Java
    Réponses: 7
    Dernier message: 06/06/2006, 09h33
  4. Réponses: 1
    Dernier message: 11/05/2006, 10h19
  5. Réponses: 1
    Dernier message: 10/05/2006, 17h55

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