Capítulo 26: Barra de progreso en EPLAN (SimpleProgress)
5 min de lectura
Parte VII: Barras de progreso - Sección 15: Progress - Nivel: Intermedio
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
- 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"
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
1.1 Definición y Namespace
La clase Progress se encuentra en Eplan.EplApi.Base.
using Eplan.EplApi.Base;
1.2 Sintaxis básica
// 1. Crear instancia
Progress progress = new Progress("SimpleProgress");
// 2. Configurar (título y máximo)
progress.BeginPart(100, "Procesando datos...");
// 3. Mostrar inmediatamente
progress.ShowImmediately();
// 4. Actualizar en un bucle
for (int i = 0; i < 100; i++)
{
progress.Step(1); // Avanzar 1 paso
}
// 5. Finalizar
progress.EndPart();
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
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:
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
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
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
- 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
Capítulo anterior
Capítulo 22: Decider - Tomar decisiones
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.