Accueil > Forum > > > > [Threads] Stopper un thread via un control
[Threads] Stopper un thread via un control
jeudi 28 février 2008 à 17:34:44 |
[Threads] Stopper un thread via un control

littlekenny
|
Salut, M'étant basé sur l'article de MorpionMx ( Opérations cross-threads - utilisation des délégations synchrones / asynchrones), j'aimerais fermer mon thread secondaire (traitement qui peut devenir long et lourd) via un bouton ou popup lié à mon thread principal. Une fois mon thread secondaire lancé, mon interface principale est cependant bloquée jusqu'à la fin de l'exécution du thread secondaire (qu'il soit asynchrone ou pas, ça ne change rien).
// mon thread secondaire private Thread threadLoadReport=null; ... //je lance mon thread secondaire à partir de la forme qui contient le bouton qui devrait être utilisé pour tuer (abord) ce thread. threadLoadReport = new Thread(new ThreadStart(ExecuteThreadReport)); threadLoadReport.Priority = ThreadPriority.Highest; threadLoadReport.Start(); ... private void ExecuteThreadReport() { IAsyncResult iar=this.BeginInvoke(new DelExecuteReport(ExecuteReport), lastReportOpened); //lancement de l'exécution lourde, contenue dans la procédure ExecuteReport(string str) this.EndInvoke(iar); } ... //le code derrière le bouton pour tuer mon thread secondaire est simple: if (threadLoadReport != null) { threadLoadReport.Abort(); threadLoadReport = null; }
Pour résumé, je ne comprends pas pourquoi mon interface principale est bloquée lorsque je lance mon thread secondaire. J'aimerais avoir la possibilité de garder la main sur celle-ci.
Un super grand merci d'avance, ça me dépannerait beaucoup.
|
|
jeudi 28 février 2008 à 18:30:19 |
Re : [Threads] Stopper un thread via un control

lassaad83
|
Qu'est ce que tu fait exactement dans la méthode ExecuteReport(string str) ?
|
|
jeudi 28 février 2008 à 18:38:18 |
Re : [Threads] Stopper un thread via un control

lassaad83
|
Rajoute un Thread.Sleep(0) au niveau ExecuteThreadReport()
|
|
jeudi 28 février 2008 à 19:25:16 |
Re : [Threads] Stopper un thread via un control

MorpionMx
|
Salut, Regarde les explications que je donne dans ce sujet, elles pourront peut etre t'aider Mx MVP C#
|
|
vendredi 29 février 2008 à 09:05:52 |
Re : [Threads] Stopper un thread via un control

littlekenny
|
Merci pour vos réponses mais ça ne fonctionne pas : > lassaad83 : ExecuteReport(string str) est ma procédure qui charge un crystal report dans un viewer. En gros, j'ai ceci comme code dedans : crystalReport.ReportSource = crReportDocument; où crReportDocument est un rapport Crystal. Selon les paramètres introduits, le temps d'exécution est plus ou moins long (de 2 à 30sec).
> MorpionMx : J'ai essayé ce qui a été fait dans l'exemple mais ça ne fonctionne pas: Dans votre exemple, il y a : for (int i = 0; i < 1000;
i++) //on boucle
{ IAsyncResult
ias = this.BeginInvoke(new monDelegate(MethodeTest), i.ToString()); //traitement léger Thread.Sleep(1000); //longue pause this.EndInvoke(ias);
}
Pour mon cas, on a : ... threadLoadReport = new Thread(new ThreadStart(ExecuteThreadReport)); threadLoadReport.IsBackground = true; // je l'ai rajouté threadLoadReport.Start(); ... private void ExecuteThreadReport() { //pas de boucle IAsyncResult iar = this.BeginInvoke(new DelExecuteReport(ExecuteReport), lastReportOpened); //traitement lourd Thread.Sleep(1000); //pause ridicule par rapport au traitement this.EndInvoke(iar); }
En appuyant comme un forcené sur mon bouton stop, on dirait qu'il peut de temps en temps recevoir l'event click. A mon avis, ça correspond au temps de pause d'une seconde. Est-ce que quelqu'un a une idée? Merci d'avance.
|
|
samedi 1 mars 2008 à 19:07:03 |
Re : [Threads] Stopper un thread via un control

coq
|
Salut, Que fait tu après le lancement du thread ? Le problème se pose t'il aussi si tu neutralises la génération du rapport et que tu la remplaces par une attente longue ? /* coq MVP Visual C# CoqBlog*/
|
|
lundi 3 mars 2008 à 14:48:56 |
Re : [Threads] Stopper un thread via un control

littlekenny
|
> coq : "Que fait tu après le lancement du thread ?" Pour l'instant, rien. J'essaye, via un popup avec un bouton (lancé dans un autre thread), si le programme me redonne la main pendant le chargement (un peu comme la méthode annuler le chargement dans Toad). Rien de concluant pour l'instant. "Le problème se pose t'il aussi si tu neutralises la génération du rapport et que tu la remplaces par une attente longue ?"Si je remplace la génération du rapport par un sleep, ça fonctionne. Je me demande si le problème n'est pas lié à la méthode invoke. J'avais lu dans un de tes posts que cette méthode créait une instance de la procédure appelée dans le thread principal (si je ne me trompe pas). Mon problème vient peut-être de là. Je vais encore tester ça. Si je trouve quelque chose, je le posterai tantôt. De même, si vous avez des idées, n'hésitez pas à partager. Merci d'avance.
|
|
mardi 4 mars 2008 à 09:51:01 |
Re : [Threads] Stopper un thread via un control

littlekenny
|
Réponse acceptée !
Je crois avoir trouvé une solution:
private Thread threadLoadReport = null; //thread pour afficher mon rapport private Thread threadStop = null; //thread pour popup, pour arrêter threadLoadReport ... threadStop = new Thread(new ThreadStart(ExecuteThreadStop)); threadStop.Name = "stop"; threadStop.Start(); threadLoadReport = new Thread(new ThreadStart(ExecuteThreadReport)); threadLoadReport.Name= "Execute"; threadLoadReport.Priority = ThreadPriority.Highest; threadLoadReport.IsBackground = true; threadLoadReport.Start(); ... private void ExecuteThreadStop() { frmStop = new FrmStop(); //mon popup qui va me servir à stopper le chargement de mon rapport (using to abord the thread threadLoadReport). frmStop.ShowDialog(); //j'utilise un showdialog et pas un show, sinon le popup disparait à la fin du thread (vu qu'ils sont liés) }
Comme vous pouvez le voir, je n'utilise pas d'invoke dans mon second thread (ExecuteThreadStop()), cela répond bien à ma question-réponse de mon post précédent sur la méthode invoke. Mon popup n'est ainsi pas lié au thread principal et est lancé via un autre thread. Le plus lourd du travail est fait, il ne me reste plus qu'à aborder le chargement du premier thread et c'est bon.
Merci pour vos aides.
|
|
Cette discussion est classée dans : bouton, thread, threads, secondaire, threadloadreport
Répondre à ce message
Sujets en rapport avec ce message
Les threads.... [ par Arthenius ]
Salut tout le monde,j'ai une petite question concernant les threads....Voila le contexte, j'ai un objet herite d'un datagrid qui permet de charger des
Problème de thread et event [ par zobio ]
Voila, je cherche a lancer un thread secondaire à partir de mon thread principal, jusque la pas de soucis. Ensuite je voudrais que lorsque mon thread
Questions sur les threads + Au Secours point d'exclamation [ par emmanuel9 ]
Bonjour à tous, En faite ma question serait sur le threads : J'ai cette fonction ci qui me sert à afficher un listview et une progressbar, je l'ais
Question réseau et multi thread [ par vbmore ]
Salut !je suis en train de programmer un client server TCP/IP et je bute sur un probleme. En effet, pour avoir un systeme asynchro., je créer une nouv
Gif + Thread [ par emmanuel9 ]
Bonjour à tous, J'ai une application qui possède un bouton exporter et les traitement effectué lors de l'appui sur ce bouton gele l'appli pendant un t
Thread.Abort() [ par nico4nicolas ]
Bonjour, Pour la premiere fois, j'utilise les threads alors, pour me faire la main j'ai fait un petit programme pour voir comment ca fonctionne, j'ai
clavier et bouton [ par Geometre15 ]
Bonjour!Voici mon probleme : j'utilise un thread dans une fenetre. Ce thread me permet de détecter l'appui sur une touche, comme les fleches par exemp
les threads 2005 sont extrement minimisé [ par Fildomen ]
sltj'ai toujours des problèmes avec la version 2005, et + précisement avec les threads, voilà mon problème:j'ai une form qui appel un sub, et ce sub c
Les threads sont lents :-( [ par Fildomen ]
salutj'ai un prog (tcpclient) où la rapidité compte vraiment,et j'ai réalisé que quand j'utilise les thread, mon prog devient lent, et quand j'execute
ThreadPool avec 1000 requetes [ par darkolite ]
Bonjour messieurs (dames?)Je lutte depuis pas mal de temps avec le ThreadPool en C#. Je ne sais pas si c'est d'ailleurs la meilleurs solution. Voila c
Livres en rapport
|
Derniers Blogs
[TECHDAYS2012] OUI J'Y SERAI![TECHDAYS2012] OUI J'Y SERAI! par JeremyJeanson
Bonsoir, Certes, je l'annonce avec un peu de retard, mais je serai effectivement au Techdays demain. Comme l'an dernier, je participerai au programme ATE (Ask The Expert). Si vous avez des questions Workflow, WCF, AppFabric ou plus généralement .net, n'hé...
Cliquez pour lire la suite de l'article par JeremyJeanson TFS INTEGRATION TOOLS - SUIVI DES SYNCHRONISATIONS AVEC REPORTING SERVICESTFS INTEGRATION TOOLS - SUIVI DES SYNCHRONISATIONS AVEC REPORTING SERVICES par vfabing
Afin de s'assurer du bon fonctionnement des différentes synchronisations effectuées par les TFS Integration Tools, 2 rapports sont présents dès l'installation. Il suffit alors d'effectuer les manipulations suivantes pour pouvoir les visualiser : Loca...
Cliquez pour lire la suite de l'article par vfabing CSS CONTENT STATE SELECTORS (PERSONNAL DRAFT)CSS CONTENT STATE SELECTORS (PERSONNAL DRAFT) par FREMYCOMPANY
Bonjour à tous, Je viens de publier une proposition comprenant 5 pseudo-classes pour le CSS Working Group ayant trait à l'état de chargement d'un élément (ex: IMG,VIDEO,AUDIO,OBJECT pour l'HTML.). Si le c½ur vous en dit, vous pouvez retrouver cette p...
Cliquez pour lire la suite de l'article par FREMYCOMPANY MBA : POURQUOI FAIRE ET COMMENT LE CHOISIR ?MBA : POURQUOI FAIRE ET COMMENT LE CHOISIR ? par ROMELARD Fabrice
Formation initiale Durant la formation, le découpage classique est le suivant (je donnerai les équivalences Suisse lorsque je les connaîtrais) : Ecole primaire jusqu'au Collège : Formation générale permettant d'obtenir les méthodes...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice Y'A DES ERREURS QUI PEUVENT RENDRE LE DéVELOPPEUR VIOLENTY'A DES ERREURS QUI PEUVENT RENDRE LE DéVELOPPEUR VIOLENT par Aleks
Quand on a ce genre d'erreur sans log :
Et bas on a juste envie de choper le gas de Microsoft qu'a développé ça et lui foutre des baffes de Coboye ! ...
Cliquez pour lire la suite de l'article par Aleks
Logiciels
Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System Easy-Planning (1.0.0.1)EASY-PLANNING (1.0.0.1)Basé sur les mêmes principes que MyPlanning, Easy-Planning permet de créer des plannings sous la ... Cliquez pour télécharger Easy-Planning COLLECTOR PLUS (3.00B)COLLECTOR PLUS (3.00B)COLLECTOR PLUS version 3.00B est un logiciel utilisant une base de données alimentée par :
- L... Cliquez pour télécharger COLLECTOR PLUS PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO LettresFaciles 2011 (8.0.0.1)LETTRESFACILES 2011 (8.0.0.1)LettresFaciles est un logiciel facilitant la création et la rédaction de lettres types.
Son inte... Cliquez pour télécharger LettresFaciles 2011
|