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 Forms Discussion :

ESC pour interrompre un calcul dans une application WinForm C#


Sujet :

Windows Forms

Vue hybride

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 26
    Par défaut ESC pour interrompre un calcul dans une application WinForm C#
    Bonjour à tous,

    J'ai construit une application Winform.
    En cliquant sur un bouton, une procédure avec de nombreux calculs est lancée.
    J'aimerais pouvoir arrêter correctement la procédure en appuyant sur la touche d'échappement (ESC).

    Mais il y a plusieurs problèmes :

    L'événement KeyDown mis en place sur le formulaire principal ne peut pas être remontée (comme une interruption) pendant que la procédure est en cours.
    L'événement KeyDown ne peut pas être détecté tant que l'appelant (fonction button_Click()) n'a pas rendu le focus sur le formulaire principal.
    L'événement KeyDown semble n'être détectable que lorsque l'application est disponible, en attente.

    J'ai essayé différentes solutions :

    J'ai placé la procédure de calcul dans un thread séparé, lancé par un bouton dont la fonction button_Click() se termine immédiatement après.
    De cette façon, la détection de l'événement KeyDown devient possible au niveau du Thread principal (Form1). Ainsi, à l'aide d'un Flag, il est possible d'arrêter la procédure placée dans le fil.
    Le problème est que les autres tâches qui devaient suivre la fin des calculs doivent également être placées dans le thread, sinon il n'est pas possible de continuer les opérations dans le thread principal après la fin des calculs.

    Autre test : Utiliser un "Low level Keyboard hook" (
    ).
    Il fonctionne bien du moment qu'il utilisé dans le thread principal (Form1) et que l'application est en attente d'entrées de l'utilisateur, mais si le fil principal est en train d'exécuter la procédure de calcul (ce qui est le but), l'événement n'est détecté qu'à la fin du calcul, ce que l'on ne veut évidemment pas.
    J'ai donc pensé à placer cette capture de clavier de bas niveau dans un autre thread séparé. Mais je ne sais pas comment faire.

    Je cherche donc une chose très simple (cliquer sur ESC pour arrêter un calcul), mais il me semble difficile d'y arriver !
    Y a-t-il quelqu'un pour m'aider, s'il vous plaît ?
    Merci beaucoup.

    Emmanuel

  2. #2
    Membre éprouvé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2011
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2011
    Messages : 79
    Par défaut
    Salut,

    Le reste de tes calculs ne peuvent pas être placés dans le thread ? Ainsi si tu stoppe le thread, tu stoppes tout...

    Sinon tu peux utiliser une mécanique d'attente par des drapeaux genre WaitForSingleEvent (j'ai plus en tête l'équivalent c#... &#128521

    Phil

  3. #3
    Membre éprouvé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2011
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2011
    Messages : 79
    Par défaut
    Pardon j'avais mal lu pour les autres calculs...
    Phil

Discussions similaires

  1. Aide pour compréhension de calcul dans une vue
    Par Latimer dans le forum SQL
    Réponses: 4
    Dernier message: 10/06/2015, 11h15
  2. Réponses: 23
    Dernier message: 28/09/2007, 13h16
  3. Base de données dans une application WinForm
    Par Gat- dans le forum Windows Forms
    Réponses: 2
    Dernier message: 06/06/2007, 06h06
  4. Réponses: 1
    Dernier message: 05/10/2006, 17h21
  5. procédure stockée pour renvoyer un état dans une application
    Par erickoffi dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 27/10/2005, 19h05

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