Interrompre l'exécution d'un thread

Signaler
Messages postés
403
Date d'inscription
vendredi 28 octobre 2005
Statut
Membre
Dernière intervention
31 août 2008
-
Messages postés
4
Date d'inscription
samedi 19 juin 2004
Statut
Membre
Dernière intervention
1 octobre 2009
-
Bonjour,

Je travaille avec un contrôle WPF dont je souhaite modifier ses propriétés dans un
autre thread. Je voudrais pouvoir interrompre l'exécution du thread
depuis un thread
extérieur, à n'importe quel moment, instantanément (l'équivalent de la
méthode Thread.Abort()).

- La classe BackgroundWorker ne me conviens pas car l'appelle de la méthode CancelAsync() n'interrompt pas directement thread associé, mais lance
simplement un appel pour dire que l'on veut l'arrêter. Il faut alors
vérifier régulièrement dans la méthode appelée par BackgroundWorker.BeginInvoke() si
un appel d'annulation a été lancé pour pouvoir réellement stopper
l'exécution du thread.

- Une autre solution serait d'utiliser le Dispatcher de mon contrôle wpf. Mais celui-ci s'exécute dans le thread principal et interrompre le thread associé reviendrait à arrêter l'application toute entière...

Auriez-vous une autre solution à me proposer ?

Merci d'avance pour vos suggestions,

Mathmax

****************************************http://www.postsharp.org/

3 réponses

Messages postés
441
Date d'inscription
mardi 2 décembre 2003
Statut
Membre
Dernière intervention
22 mai 2012
7
Salut Mathmax,

Je ne comprend pas ton problème... pourquoi ne pas utiliser l'objet System.Threading.Thread ??

Tu peux déclarer son instance comme static de manière à pouvoir appeler sa méthode Abord depuis n'importe où (même dans un  thread différent)

private Thread _cancelThread;

public Form1()
{
    _cancelThread = new Thread( new ThreadStart( ThreadTask ) );
    _cancelThread.Start();

    Thread.Sleep( 1000 );
    _cancelThread.Abort();
}

private void ThreadTask()
{
    try
    {
        Thread.Sleep( 5000 );

        // N'arrivera jamais ici !!
    }
    catch( ThreadAbortException )
    {
        return;
    }
}
Messages postés
403
Date d'inscription
vendredi 28 octobre 2005
Statut
Membre
Dernière intervention
31 août 2008

Je ne peux pas faire cela car je dois modifier les propriétés d'un composant WPF dans le thread qui doit être interrompu. On n'est pas autorisé à accedere aux propriétés d'un contrôle WPF depuis un thread qui n'est pas le thread principal. Il semble qu'il faille pour cela invoquer une méthode depuis la propriété Dispatcher du controle en question. Cette méthode s'éxécute alors dans le thread principal et l'on peut ainsi modifier les propriétés du contrôle. Le problème est qu'on ne peut alors pas interrompre le déroulement de cette méthode car elle s'exécute dans le thread principal. Je pensais qu'il était possible de travailler avec un BackgroundWorker et que celui permettait justement de modifier le control WPF depuis un autre thread. En fait ça n'est même pas le cas... Je cherche donc une autre solution à ce problème.

Mathmax

****************************************http://www.postsharp.org/
Messages postés
4
Date d'inscription
samedi 19 juin 2004
Statut
Membre
Dernière intervention
1 octobre 2009