Capítulo 26: SimpleProgress - Progreso simple
Capítulo 26: SimpleProgress - Progreso simple
Sección titulada «Capítulo 26: SimpleProgress - Progreso simple»Parte VII: Barras de progreso - Sección 15: Progress - Nivel: Intermedio
Objetivos de aprendizaje
Sección titulada «Objetivos de aprendizaje»Al finalizar este capítulo serás capaz de:
- Implementar la barra de progreso nativa de EPLAN (
Progress) - Mostrar el avance de tareas largas para evitar que EPLAN parezca congelado
- Usar
BeginPart,EndPartyStep - Configurar opciones de cancelación (permitir al usuario abortar)
Requisitos previos
Sección titulada «Requisitos previos»- Haber completado el Capítulo 22 (Decider)
- Entender bucles (
for,foreach) - Conocer
System.Threading.Thread.Sleep(para simular carga en ejemplos)
Introducción: El problema del “EPLAN congelado”
Sección titulada «Introducción: El problema del “EPLAN congelado”»Cuando ejecutas un script que tarda mucho tiempo (ej. procesar 500 páginas), la interfaz de EPLAN se congela. El usuario no sabe si el programa está trabajando o si se bloqueó.
Solución: EPLAN proporciona la clase Progress para mostrar una barra de carga estándar.
1. La clase Progress
Sección titulada «1. La clase Progress»1.1 Definición y Namespace
Sección titulada «1.1 Definición y Namespace»La clase Progress se encuentra en Eplan.EplApi.Base.
using Eplan.EplApi.Base;1.2 Sintaxis básica
Sección titulada «1.2 Sintaxis básica»// 1. Crear instanciaProgress progress = new Progress("SimpleProgress");
// 2. Configurar (título y máximo)progress.BeginPart(100, "Procesando datos...");
// 3. Mostrar inmediatamenteprogress.ShowImmediately();
// 4. Actualizar en un buclefor (int i = 0; i < 100; i++){ progress.Step(1); // Avanzar 1 paso}
// 5. Finalizarprogress.EndPart();2. Métodos principales
Sección titulada «2. Métodos principales»| Método | Descripción |
|---|---|
BeginPart(total, título) | Inicia la barra con un valor máximo (total) y un título. |
ShowImmediately() | Fuerza que la barra aparezca instantáneamente (si no, puede tardar un poco). |
SetActionText(texto) | Cambia el texto descriptivo debajo de la barra. |
Step(cantidad) | Incrementa el progreso en la cantidad especificada. |
EndPart(bool) | Cierra la barra. Pasar true para limpiar. |
SetAllowCancel(bool) | Permite que el usuario cancele el proceso con el botón “Cancelar”. |
3. Ejemplo práctico: Procesamiento simulado
Sección titulada «3. Ejemplo práctico: Procesamiento simulado»Vamos a crear un script que simule una tarea larga (como exportar archivos) usando una barra de progreso.
using Eplan.EplApi.Base;using Eplan.EplApi.Scripting;using System.Threading; // Para Sleep
public class EjemploProgress{ [Start] public void Function() { int totalPasos = 20;
// 1. Iniciar Progress Progress progress = new Progress("SimpleProgress"); progress.SetAllowCancel(true); // Permitir cancelar progress.BeginPart(totalPasos, "Iniciando proceso..."); progress.ShowImmediately();
try { for (int i = 0; i < totalPasos; i++) { // 2. Verificar si el usuario canceló if (progress.Canceled()) { new BaseException("Proceso cancelado por usuario", MessageLevel.Warning).FixMessage(); break; }
// 3. Actualizar texto y barra progress.SetActionText("Procesando elemento " + (i + 1) + " de " + totalPasos); progress.Step(1);
// IMPORTANTE: Simular trabajo Thread.Sleep(200); // 0.2 segundos por paso } } finally { // 4. Siempre finalizar la barra progress.EndPart(); } }}Notas sobre el ejemplo:
Sección titulada «Notas sobre el ejemplo:»progress.Canceled(): Devuelvetruesi el usuario presionó Cancelar. Es vital comprobarlo dentro del bucle.try-finally: Asegura queprogress.EndPart()se llame incluso si ocurre un error, para que la barra no se quede “pegada” en pantalla.
4. Patrón recomendado: Progress en bloques using
Sección titulada «4. Patrón recomendado: Progress en bloques using»Aunque C# usa IDisposable, la clase Progress de EPLAN API no implementa IDisposable de forma tradicional en versiones antiguas, por lo que el patrón try-finally es el más seguro.
Sin embargo, si quieres encapsular la lógica, asegúrate siempre de cerrar la barra.
Error común: Olvidar llamar a EndPart().
Consecuencia: La barra de progreso sigue visible sobre EPLAN aunque el script haya terminado.
5. Progress vs CommandLineInterpreter
Sección titulada «5. Progress vs CommandLineInterpreter»Algunos comandos de CommandLineInterpreter (como export) muestran su propia barra de progreso.
- Si usas
Execute("export"), EPLAN manejará su propia barra. - Si tu script hace un bucle que llama muchas veces a comandos rápidos, o procesa lógica propia (leer archivos, cálculos), tú debes crear la barra
Progress.
Resumen
Sección titulada «Resumen»- Usa Progress para tareas que tomen más de 1-2 segundos.
- Inicia con
BeginPart, avanza conStep, finaliza conEndPart. - Comprueba
Canceled()si quieres permitir que el usuario aborte. - Siempre usa
try-finallypara garantizar que la barra se cierre.
Conexiones
Sección titulada «Conexiones»Capítulo anterior
Sección titulada «Capítulo anterior»Capítulo 22: Decider - Tomar decisiones
Próximo capítulo
Sección titulada «Próximo capítulo»Capítulo 24: Diálogos simples (Select)
En la próxima parte (Parte V), aprenderemos a usar diálogos de selección estándar de EPLAN, como SelectSimple y SelectFile.