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

Windows Mobile .NET Discussion :

[C#] Probleme de Process


Sujet :

Windows Mobile .NET

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Mai 2011
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Mai 2011
    Messages : 2
    Points : 1
    Points
    1
    Par défaut [C#] Probleme de Process
    Bonjour à tous,

    Voici mon problème :
    Je code sous Windows Mobile 2003.
    Mon application doit lancer via un clic bouton une autre application et attendre la fin de son exécution pour poursuivre la sienne.
    Aucun souci à priori si ce n'est le code suivant...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Process proc = new Process();
              proc.StartInfo.FileName = "un exe quelconque";
              proc.Start();
              this.SendToBack();
              proc.WaitForExit();
              this.BringToFront();
    J'exécute ce code depuis une Form. Tout à l'air de bien fonctionner jusqu'à la fermeture du calendrier. Là, le focus sur mon application ne m'est que partiellement rendu : elle s'affiche à nouveau mais ses controles comme le reste de Windows sont gelés. Il ne me reste plus qu'à rebooter l'appareil...

    Je sais bien que ça peut paraitre un peu vague mais si quelqu'un a ne serait ce qu'un début de piste à cette bizarerrie d'avance merci !

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 27
    Points : 41
    Points
    41
    Par défaut
    Je suppose que tu utilise la croix a gauche de la barre windows : sur PDA les application ne sont (par défaut) pas fermé en cliquant sur cette croix mais juste masqués (elles sont toujours présente dans le gestionnaire de tache) du coup ton application attend que l'application soit réellement quittée.
    Essaye de quitter proprement ton application ou cherche dans les paramètre système, il y a un paramètre qui permet de quitter les application lors de la fermeture de l'écran principal.

  3. #3
    Expert confirmé Avatar de DonQuiche
    Inscrit en
    Septembre 2010
    Messages
    2 741
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 2 741
    Points : 5 493
    Points
    5 493
    Par défaut
    Sinon, lancer le processus depuis un autre thread que l'UI résoudrait, à mon avis, pas mal de problèmes présents et futurs.

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 27
    Points : 41
    Points
    41
    Par défaut
    Tant qu'a créer un nouveau thread, autant ne pas mettre de WaitForExit() (ca me parait un peu bizarre de créer un thread qui ne fait que lancer un exe lui-même dans un nouveau thread)...
    Bref, sauf erreur de ma part, je ne pense pas qu'un nouveau thread soit la solution

  5. #5
    Expert confirmé Avatar de DonQuiche
    Inscrit en
    Septembre 2010
    Messages
    2 741
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 2 741
    Points : 5 493
    Points
    5 493
    Par défaut
    Alors permets-moi d'insister.

    Appeler WaitForExit depuis le thread UI, c'est une mauvaise pratique : la pompe à messages win32 est gelée (fenêtre pas repeinte, etc) et l'application risque d'être considérée par Windows ou par l'utilisateur comme crashée. C'est typiquement le genre de comportement qui peut créer des problèmes. Ce qu'il faut faire c'est verrouiller l'UI sans bloquer le thread UI (afficher une form modale avec une animation d'avancement).

    Pour qu'un thread UI puisse lancer un processus et être notifié de la fin sans bloquer le thread UI, tu as deux façons de faire :
    * Souscrire à l'événement Exited (avec EnableRaisingEvents à vrai)
    * Lancer un thread qui appellera WaitForExit.

    La solution du thread est assez élégante car on réunit dans une même méthode l'initialisation du processus, son exécution et les traitements à faire après son arrêt. C'est transparent, ça fait moins code spaghetti et on n'a pas à penser à se désabonner de l’évènement. Qui plus est, activer les évènements sur les processus à un coût en performances (voir la doc de EnableRasiingEvent, ça doit passer par SetWindowsHook) alors que, en revanche, il me semble que WaitForExit n'a aucun impact.


    PS : Lancer le process sur un thread sans utiliser WaitForExit n'aurait aucun intérêt : le thread quitterait sitôt le processus lancé. Ici, on veut détecter la fin du processus.

  6. #6
    Nouveau Candidat au Club
    Inscrit en
    Mai 2011
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Mai 2011
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Merci de vos réponses et honte à moi

    En effet la croix Windows est la première chose que j'ai testée, en appellant des programmes dont je connaissais le comportement, et d'autres, comme le calendrier, qui continuent à tourner en arrière plan. Dans les deux cas le problème persistait.

    J'en avais donc déduit que la sortie du programme n'était pas l'élément qui coinçait et fait tous mes autres tests sur le calendrier...jusquà ce matin où un petit test de l'évènement de sortie sur mon application règle la question.

    Problème résolu donc. Merci à DonQuiche !

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

Discussions similaires

  1. [2008] Probleme de processing incremental
    Par mikedavem dans le forum SSAS
    Réponses: 1
    Dernier message: 23/05/2011, 10h32
  2. Probleme mod_jk : process tomcat5.exe qui s'enflamme
    Par progamer54 dans le forum Tomcat et TomEE
    Réponses: 2
    Dernier message: 27/01/2009, 10h41
  3. Probleme avec Process.Start
    Par lucyole dans le forum VB.NET
    Réponses: 4
    Dernier message: 03/01/2008, 18h42
  4. probleme avec Process et Runtime
    Par vince3320 dans le forum API standards et tierces
    Réponses: 1
    Dernier message: 16/01/2007, 18h57
  5. [Process] Probleme d'execution d'un prog c dans un prog java
    Par Elmilouse dans le forum API standards et tierces
    Réponses: 2
    Dernier message: 08/06/2004, 14h26

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