OVH Cloud OVH Cloud

Bouton STOP et annulation d'un traitement en cours

5 réponses
Avatar
J. Smith
Bonjour,

Je suis en train de coder une classe qui effectue des scans de ficheirs sur
le disque dur.
Cette classe possède une méthode StartSCAN qui effectue ce travail.

StartSCAN est appelée depuis une fenêtre, suite au clic sur un bouton
"Scan".
Or cette méthode prend beaucoup de temps.

Je souhaite donc :
- présenter en début de Scan un bouton "Stop" qui permet de stopper la
procédure de scan
- présenter sur la fenêtre appelante les noms des fichiers en cours de
scan

Si je m'en sors pas trop mal pour le deuxième aspect, je n'arrive pas à
savoir comment mettre en oeuvre le premier. J'ai cru comprendre qu'il
existait plusieurs méthodes pour gérer l'arrêt d'un traitement en cours.
Pourriez-vous me guider ?

Quelle est la manière la plus standard de gérer ce type de problématique ?
Auriez-vous des exemples (simples) ?
Ou à défaut, une description de la méthode à suivre ?

En vous remerciant.

5 réponses

Avatar
Patrick Philippot
J. Smith wrote:
Je souhaite donc :
- présenter en début de Scan un bouton "Stop" qui permet de
stopper la procédure de scan



Bonjour,

Ce n'est pas bien compliqué à mettre en oeuvre. A priori, votre
traitement est basé sur une boucle. Il vous suffit donc d'avoir dans
votre classe une variable booléenne qui est à FALSE au départ du
traitement et qui sera mise à TRUE par action sur le bouton Stop. Dans
votre traitement, à chaque passe vous vérifiez l'état de ce flag et s'il
est passé à TRUE, vous arrêtez le traitement proprement.

Ce raisonnement vaut également si vous démarrer le traitement en
question sur thread séparé ce qui serait peut-être plus pratique si les
opérations prennent vraiment beaucoup de temps.

--
Patrick Philippot - Microsoft MVP
MainSoft Consulting Services
www.mainsoft.fr
Avatar
J. Smith
Merci,

Mais cette façon de faire pose problème.
Le traitement étant très gourmant, la fenêtre principale est surchargée et
n'a plus assez de temps pour accepter et gérer les évènements sur les
boutons. Aussi est-il impossible de cliquer sur le bouton Stop avant la fin
du traitement.


"Patrick Philippot" a écrit dans le
message de news:O7uaJ8f$
J. Smith wrote:
> Je souhaite donc :
> - présenter en début de Scan un bouton "Stop" qui permet de
> stopper la procédure de scan

Bonjour,

Ce n'est pas bien compliqué à mettre en oeuvre. A priori, votre
traitement est basé sur une boucle. Il vous suffit donc d'avoir dans
votre classe une variable booléenne qui est à FALSE au départ du
traitement et qui sera mise à TRUE par action sur le bouton Stop. Dans
votre traitement, à chaque passe vous vérifiez l'état de ce flag et s'il
est passé à TRUE, vous arrêtez le traitement proprement.

Ce raisonnement vaut également si vous démarrer le traitement en
question sur thread séparé ce qui serait peut-être plus pratique si les
opérations prennent vraiment beaucoup de temps.

--
Patrick Philippot - Microsoft MVP
MainSoft Consulting Services
www.mainsoft.fr




Avatar
Pierre Alexis
J. Smith a écrit :

Je souhaite donc :
- présenter sur la fenêtre appelante les noms des fichiers en cours de
scan



Avec un évenement du genre "OnFileScanned" qui envoie à tous les abonnés
le fichier que l'on est en train de scanner.

++

--
Pierre ALEXIS
Courriel :
FAQ Visual Basic : http://faq.vb.free.fr/
Avatar
J. Smith
Merci

Dans le cas du thread, pouvez-vous m'indiquer les grandes lignes à suivre ?
Je suis un peu perdu.

"Patrick Philippot" a écrit dans le
message de news:OtsGbpg$
J. Smith wrote:
> Mais cette façon de faire pose problème.
> Le traitement étant très gourmant, la fenêtre principale est
> surchargée et n'a plus assez de temps pour accepter et gérer les
> évènements sur les boutons. Aussi est-il impossible de cliquer sur le
> bouton Stop avant la fin du traitement.

C'est bien pourquoi j'ai proposé d'effectuer ce traitement sur un thread
séparé.

Ou bien vous appelez dans votre boucle de traitement l'équivalent du
DoEvents de VB6: Application.DoEvents() . Ce qui rendra la main
temporairement et permettra de traiter les messages en attente pour la
fenêtre principale.

--
Patrick Philippot - Microsoft MVP
MainSoft Consulting Services
www.mainsoft.fr




Avatar
Patrick Philippot
J. Smith wrote:
Dans le cas du thread, pouvez-vous m'indiquer les grandes lignes à
suivre ? Je suis un peu perdu.



Bonjour,

L'explication du multithreading dépasse le cadre d'un newsgroup mais
vous trouverez facilement des introductions à ce sujet en ligne:

http://www.c2i.fr/code.asp?IDCode53
http://www.dotnet-fr.org/sections.php3?op=viewarticle&artidf

Bien sûr la documentation de VB .Net et tous les livres sur VB .Net
traitent le sujet de manière approfondie.

--
Patrick Philippot - Microsoft MVP
MainSoft Consulting Services
www.mainsoft.fr