Jak rozpocząć wątek, jeśli przycisk został naciśnięty i zatrzymać go, jeśli zostanie ponownie naciśnięty?

Używam następnego kodu do zrobienia tego, o co proszę:

private delegate void CallerDelegate(object e);
CallerDelegate caler = new CallerDelegate(MethodToCall);

na zdarzeniu kliknięcia przycisku:

if (currBusyThrd != null && currBusyThrd.IsAlive)
   {
    currBusyThrd.Abort();
   }
ThreadPool.SetMaxThreads(1, 1);
//queue the work for thread processing
ThreadPool.QueueUserWorkItem(new WaitCallback(WaitCallbackMethod))

Metoda „WaitCallbackMethod” to:

void WaitCallbackMethod(object stateInfo)
  {
     // argList : i put some argument in a list to use it in "MethodToCall" ...
     BeginInvoke(caler,argList);
  }

a metoda, którą nazywam wątkiem, to:

void MethodToCall(object args)
 {
 //Here I get the thread I'm calling to stop it when btn clicked again
 currBusyThrd = Thread.CurrentThread;

 // The rest of the code ...
 }

Czuję, że to jest złe ... Jak to zrobić dobrze?

Faktycznie wywołanie będzie przez TextBox_KeyUp .. więc za każdym razem, gdy użytkownik wprowadzi znak, kod zostanie wykonany ponownie .. i BackgroundWorker nie zadziałał.

questionAnswers(4)

yourAnswerToTheQuestion