Cómo evitar que se "congele" una aplicación en un proceso largo
Artículo por Club Developers · 31 diciembre 2005
4277 vistas
Dentro de grandes tratamientos en bucle, las ventanas de las aplicaciones no pueden ser refrescadas por Windows (efecto de congelación) mientras el proceso esté en curso. La solución radica en hacer una llamada al método Application.ProcessMessages de forma regular con el fin de tratar los mensajes de Windows. Esto también permitirá el programar un botón de "Stop" sin tener que recurrir al Ctrl+Alt+Sup.
En el código de ejemplo, la variable Stop indica que el botón "Stop" ha sido pulsado y que el proceso debe pararse. La llamada a Application.ProcessMessages permite de actualizar normalmente la ventana durante la ejecución del bucle.
En el código de ejemplo, la variable Stop indica que el botón "Stop" ha sido pulsado y que el proceso debe pararse. La llamada a Application.ProcessMessages permite de actualizar normalmente la ventana durante la ejecución del bucle.
delphi
type TForm1 = class(TForm) ... private Stop : Boolean; ... end; ... procedure TForm1.BoutonMarcheClick(Sender: TObject); Var i: Integer; begin { Poner a falso el Stop } Stop := False; I := 0; { Tratamiento largo } Repeat Inc(i); Label1.Caption := IntToStr(i); { procesar mensajes de Windows } Application.ProcessMessages; Until (i >= 100000000) or Stop; end; procedure TForm1.BoutonStopClick(Sender: TObject); begin { pide la parada del bucle } Stop := True; end;