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ł.