Il terminate lo fa ogni qual volta finisce updateState (All'interno della funzione stessa).
Esegui mi serve per controllare meglio l'uscita dal thread, infatti la uso anche all'interno dell'updateState per fermare i cicli qualora fosse false (faccio delle interrogazioni al database e ciclicamente aggiorno una listView dell'interfaccia grafica richiamando un'altra funzione che sincronizzo).
Cmq credo di aver risolto il problema: io creavo il Thread durante l'esecuzione dell'evento OnShow della form principale. Ora l'ho spostato, per una necessità diversa, dentro ad un timer che richiamo dall'OnShow e il problema è svanito! Direi quindi che ho avuto un cosidetto colpo di cul...
Comunque la scelta dei 4 secondi è dettata dal fatto che questo thread serve a dare informazioni tramite l'interfaccia e deve coesistere con altri 4 che rappresentano invece il cuore del programma e non volevo appesantire troppo l'applicativo.
si è vero sarebbe meglio il AGGST.WaitFor() al posto del ciclo ma con il repeat io posso dare delle istruzioni all suo interno tipo application.processMessage tanto per non lasciare l'applicativo in stato di momentaneo blocco.
Cmq grazie per l'aiuto.