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 :

Commande système synchrone


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre émérite
    Profil pro
    Développeur Web
    Inscrit en
    Février 2008
    Messages
    2 896
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Février 2008
    Messages : 2 896
    Par défaut Commande système synchrone
    Bonjour tout le monde,

    Depuis un programme C# on peut lancer une commande système de façon asynchrone comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.Threading.Thread.CurrentThread.Start(commandline)
    Bon, mais maintenant, si je veux exécuter la commande de façon synchrone, de façon à exécuter un traitement une fois qu'elle a terminé ?

    Je peux surveiller la présence de la fenêtre associée, mais est-ce qu'il existe une commande C# plus appropriée ?

  2. #2
    Expert confirmé

    Avatar de François DORIN
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2016
    Messages
    2 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Charente Maritime (Poitou Charente)

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

    Informations forums :
    Inscription : Juillet 2016
    Messages : 2 761
    Billets dans le blog
    21
    Par défaut
    Citation Envoyé par Gluups Voir le message
    Depuis un programme C# on peut lancer une commande système de façon asynchrone comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.Threading.Thread.CurrentThread.Start(commandline)
    Je serais très étonné que cela fonctionne, pour deux raisons :
    • Start permet de lancer l'exécution d'un thread. Or là, il s'agit plutôt d'un processus externe si j'ai bien compris la question ;
    • Start permet de lancer l'exécution d'un thread qui n'a pas encore démarré. Or, CurrentThread représente le thread en cours d'exécution (celui qui exécute le code). Appeler la méthode Start sur un thread qui tourne génère normalement une exception


    Je pense que ce que tu cherches, c'est plutôt Process, qui permet effectivement de démarrer un nouveau processus. La classe Process a une méthode WaitForExit qui permet d'attendre la fin du processus. A priori, c'est ce que tu recherches

  3. #3
    Membre émérite
    Profil pro
    Développeur Web
    Inscrit en
    Février 2008
    Messages
    2 896
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Février 2008
    Messages : 2 896
    Par défaut
    Ah oui en effet, c'est plutôt Process.Start, pardon.
    J'espère que ça ne va pas trop embrouiller la question. Process.Start permet de démarrer un nouveau processus, et occasionne donc un traitement asynchrone.
    Pour un traitement synchrone, est-ce qu'il y a une autre façon de s'y prendre, ou faut-il faire une boucle pour vérifier que le processus est toujours en cours d'exécution ? J'ai plus l'habitude d'ailleurs en cherchant la fenêtre.
    Ah on dirait que je n'avais pas tout lu : WaitForExit.
    Mais ... Process.Start retourne un booléen, pas vrai ?
    GetProcessesByName ?

  4. #4
    Expert confirmé

    Avatar de François DORIN
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2016
    Messages
    2 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Charente Maritime (Poitou Charente)

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

    Informations forums :
    Inscription : Juillet 2016
    Messages : 2 761
    Billets dans le blog
    21
    Par défaut
    Comme dit précédemment, pour le traitement synchrone, lancer le processus en asynchrone, puis l'attendre avec WaitForExit

  5. #5
    Membre émérite
    Profil pro
    Développeur Web
    Inscrit en
    Février 2008
    Messages
    2 896
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Février 2008
    Messages : 2 896
    Par défaut
    Ça au moins c'est de la réactivité
    Il faut mieux que je ne réponde pas trop à côté.

  6. #6
    Membre émérite
    Profil pro
    Développeur Web
    Inscrit en
    Février 2008
    Messages
    2 896
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Février 2008
    Messages : 2 896
    Par défaut
    On dirait que contrairement à ce que dit la documentation, Process.Start() ne retourne pas un booléen, mais un processus. Donc c'est vite fait de lui appliquer WaitForExit.
    D'ailleurs en disant ça je suis allé un peu vite en besogne : Process.Start() sans argument retourne un booléen, alors qu'il existe quatre autres signatures qui permettent de préciser le programme à lancer, qui retournent le processus ouvert.
    Peut-être bien que ça ne génère pas d'exception de lancer WaitForExit dessus si le processus n'a pas été ouvert.
    D'ailleurs je reviendrai là-dessus demain après-midi, car le programme à lancer n'est pas sur ma machine de développement, et que le tout s'intègre dans un traitement un peu plus complexe, qui va peut-être donner lieu à un autre fil.
    Merci pour la réponse.

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

Discussions similaires

  1. Commandes systèmes avec pl/pgsql
    Par Takayanagi dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 11/08/2006, 12h36
  2. commandes système
    Par ghostdog dans le forum C
    Réponses: 13
    Dernier message: 27/12/2005, 16h03
  3. exécuter une commande système à partir de sqlplus?
    Par c_moi_c_moi dans le forum Oracle
    Réponses: 24
    Dernier message: 08/11/2005, 15h11
  4. [Process] éxecution d'une commande système
    Par alex'l dans le forum API standards et tierces
    Réponses: 12
    Dernier message: 13/09/2005, 17h29
  5. Commande Système
    Par siaoly dans le forum Langage
    Réponses: 5
    Dernier message: 14/07/2005, 00h25

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