Supose vous avez un formulaire avec un bouton qui commence/arrête un fil (pas une pause ou d'interrompre, je vraiment besoin d'arrêter le fil!) Commander ce code:C# CF Redémarrez un fil
Constructor()
{
m_TestThread = new Thread(new ThreadStart(ButtonsThread));
m_bStopThread = false;
}
ButtonClick
{
// If the thread is not running, start it
m_TestThread.Start();
// If the thread is running, stop it
m_bStopThread = true;
m_TestThread.Join();
}
ThreadFunction()
{
while(!m_bStopThread)
{
// Do work
}
}
2 questions (rappelez-vous CF): - Comment puis-je savoir si le thread est en cours d'exécution (je n'arrive pas à accéder au m_pThreadState, et j'ai essayé le GetThreadExitCode() C++, il donne des résultats faux)? - Question la plus importante: si j'ai arrêté le thread, je ne peux pas le redémarrer, très probablement parce que le m_TestThread.m_fStarted est encore défini (et il est privé donc je ne peux pas y accéder)! Et donc m_TestThread.Start() génère une exception (StateException).
L'arrêt du thread avec Abort() ne le résout pas. Si je mets mon m_TestThread = null; ça marche, mais ensuite je crée une fuite de mémoire. Le GC ne nettoie pas non plus, même si j'attends xx secondes.
Quelqu'un a une idée? Toute aide très appréciée! Grtz E
Voir les sous-titres pour Suspend et Resume: "NOTE: Cette API est maintenant obsolète." –
THX tous pour les commentaires. Malheureusement, ThreadState n'est pas pris en charge dans les FC (http://msdn.microsoft.com/fr-fr/library/system.threading.thread_members.aspx). Je vais m'en tenir au booléen, mais je trouve que c'est une façon très maladroite de gérer (mais peut-être que c'est juste moi) –