una subrutinas subrutina subprograma que mplab microcontrolador metodo entre ejemplos diferencia caracteristicas assembler c# multithreading

c# - subrutinas - que es una subrutina subprograma



C#¿Cómo puedo enviar un receso a otra sub rutina? (6)

Tengo un bucle en ejecución que procesará 1000 de registros, actualmente, una vez que se ejecuta el bucle, no se puede detener y el usuario debe esperar hasta que finalice. ¿Cómo puedo detener el ciclo cuando alguien hace clic en el botón "Cancelar"? ¿Cómo me meto en esa otra rutina?

Gracias


Puede agregar un botón cancelar que establece una bandera booleana

Dentro del ciclo agregue "Application.DoEvents" en los puntos clave y luego verifique el indicador booleano. Si la bandera se ha disparado, realice su limpieza y salga del ciclo.


Puede ejecutarlo en su propio hilo y abortar el hilo. Solo tenga en cuenta que eso podría dejar la operación en mal estado.

En su lugar, debe crear un indicador de salida que el hilo verifique en los puntos de seguridad. Si está marcado para salir, el hilo se detendrá tan pronto como sea seguro para hacerlo.


Solo puede usar el componente BackgroundWorker .

Está basado en eventos y es muy fácil de utilizar. Parece muy apropiado para lo que describes.

Tiene un buen soporte para señalización de cancelación , así como informes de progreso también.

Y muchos ejemplos de código que puedes buscar en google.

Establezca la propiedad WorkerSupportsCancellation para que sea verdadera.

backgroundworker1.WorkerSupportsCancellation = true;

Hazlo antes de comenzar el trabajador.

Luego, en el ciclo, puede sondear la propiedad CancellationPending :

if (backgroundWorker1.CancellationPending) return;

Solo un ejemplo, pero deberías entender la idea.


Establezca la propiedad WorkerSupportsCancellation en su BackgroundWorker en verdadero :-)

También debe verificar la propiedad CancellationPending dentro de su ciclo para ver si debe interrumpir el procesamiento. El artículo de MSDN que chakrit vinculado tiene un buen bloque de código de muestra

Editar: D''oh, me tienes por unos segundos allí chakrit :)


gracias por las respuestas Es un backgroundworker pero cuando uso backgroundworker1.cancelAsync(); Obtengo la excepción:

"Este BackgroundWorker indica que no es compatible con la cancelación. Modifique WorkerSupportsCancellation para indicar que admite la cancelación"

¿Cómo hago para alterar esto? Este es el código heredado, lo siento!