estoy usando el siguiente código para hacer lo que estoy pidiendo:¿Cómo iniciar el hilo si se presiona el botón y detenerlo si se vuelve a presionar?
private delegate void CallerDelegate(object e);
CallerDelegate caler = new CallerDelegate(MethodToCall);
en el evento de clic de botón:
if (currBusyThrd != null && currBusyThrd.IsAlive)
{
currBusyThrd.Abort();
}
ThreadPool.SetMaxThreads(1, 1);
//queue the work for thread processing
ThreadPool.QueueUserWorkItem(new WaitCallback(WaitCallbackMethod))
Método "WaitCallbackMethod" es:
void WaitCallbackMethod(object stateInfo)
{
// argList : i put some argument in a list to use it in "MethodToCall" ...
BeginInvoke(caler,argList);
}
y el método que estoy llamando por el hilo es:
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 ...
}
Creo que esto está mal ... ¿Cómo hacerlo bien?
En realidad, la llamada será por TextBox_KeyUp ... así que cada vez que el usuario ingrese un carácter, el código se ejecutará nuevamente ... y BackgroundWorker no funcionó.
así que estás iniciar y detener un hilo de marcha larga con cada pulsación de tecla otra? –
sí, exactamente, eso es lo que trato de hacer – Dabbas
@ AL0NE, he actualizado mi respuesta. Vea el método ExecuteThreadLogicConditionally(). –