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 :

Comment interrompre une tâche ?


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
    Novembre 2007
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 20
    Par défaut Comment interrompre une tâche ?
    Bonjour

    J'ai une tache à effectuer avec tout plein de calculs longs et fastidieux.
    J'ai une "ProgressBar" que je mets à jour régulièrement et un bouton "Arrêter" qui pour l'instant ne sert à rien (et c'est bien là le problème).

    Comment puis-je interrompre ma tache avec ce bouton alors que le système et occupé à faire des tas de calculs et ne voit pas que j'ai appuyé sur le bouton ?

    Quelqu'un aurait une solution ?

    Merci d'avance

    kwAz

  2. #2
    Expert confirmé
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Par défaut
    cherche sur le net des cours sur le BackgroundWorker.
    D'ailleurs, il y a un cours sur dvp :
    http://glarde.developpez.com/dotnet/bgworker/

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 20
    Par défaut
    Pas sûr que ce lien m'aide beaucoup (A moins que quelque chose m'ais échappé) :
    Je ne veux pas paralléliser mes calculs, je veux pouvoir les interrompre avec un bouton.

    D'autres propositions ?

    Merci d'avance

    kwAz

  4. #4
    Expert confirmé
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Par défaut
    Mais oui mais oui, ça pourrai marcher
    Dans ton thread principal tu attend tranquillement le backgroundWorker et tu utilise une variable globale genre "isCancelled" que tu met à true lors de l'appui sur le boutton "Annuler". Dans ton code que tu utilises pour faire ton calcul, tu vérifie à chaque étape la valeur de isCancelled et tu arretes tout si isCancelled = true.

    L'autre méthode c'est de créer toi même le thread ( avec System.Threading.Thread ) et de faire un bon vieux Thread.Abort à l'appui du boutton "Annuler" ... mais c'est pas très élégant ...

  5. #5
    Membre très actif
    Avatar de Cyrilange
    Profil pro
    Inscrit en
    Février 2004
    Messages
    268
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 268
    Par défaut
    Apparament tu ne veux pas arrêter tes calculs, tu veux juste les mettre en pause c'est ça ?

  6. #6
    Membre émérite
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    547
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 547
    Par défaut
    Salut,

    si tu veux juste interrompre (pause) tes calculs pour pouvoir les continuer plus tard, un ManualResetEvent fera le job, en le placant dans ton code de facon à ce qu'il soit souvent controlé. Tu le reset quand tu veux pauser et tu le signales quand tu veux reprendre.

    Si tu veux interrompre totalement les calculs (terminer le thread), tu peux soit inspecter un booleen si les calculs sont iteratifs (cas le plus simple, si ton code ne l'est pas, tu devras trouver un moyen d'inspecter cette variable regulierement, pour donner de la "reactivité" au cancel), ou alors, en dernier recours, appeler un Thread.Abort() (ce qui exclut l'utilisation de BGW ou du pool), mais attention aux consequences !

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

Discussions similaires

  1. MS Project - Comment définir une tâche insécable?
    Par TomTom29 dans le forum Project
    Réponses: 0
    Dernier message: 29/04/2008, 16h44
  2. Réponses: 1
    Dernier message: 17/04/2008, 15h57
  3. Comment spécifier une tâche cron ?
    Par Nibor dans le forum Administration système
    Réponses: 8
    Dernier message: 06/11/2007, 23h03
  4. Comment planifier une tâche avec MS SQL SERVER ?
    Par cadabricadabra dans le forum MS SQL Server
    Réponses: 11
    Dernier message: 18/07/2007, 15h40
  5. Comment ajouter une tâche a chaque selection
    Par niCo.nb dans le forum C
    Réponses: 2
    Dernier message: 01/11/2005, 16h26

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