Ein Thread zwischen Arbeitsthread und
Gui würde Sinn machen, wenn der Arbeitsthread irgendwelche Ergebnisse in einer Liste bereitstellt, die die
Gui (oder ein anderer Thread) nach und nach abarbeiten muss.
Das ist ja aber vorliegend offenbar nicht notwendig.
Also würde ich nach den Zuständigkeiten schauen.
Der Arbeitsthread berechnet etwas und kann einen Fortschrittswert bereit stellen.
Die
GUI dient der Darstellung und Bedienung durch den User.
Da der Thread ohnehin läuft und die Darstellung über Synchronize problemlos möglich ist, würde ich das dort veranlassen.
Im Formular kann der User sich - wenn er will - normal bewegen und etwas schreiben und so nebenbei ändert sich die Progressbar Stück für Stück.
Die
GUI selbst muss nicht wissen, was der Thread tut oder wie weit er ist. Ein kleiner Teil der
GUI-Funktionalität wird einfach vorübergehend vom Thread gesteuert.
Da braucht es m.E. keinen zweiten Thread und keinen Timer.
Anders wäre es (nur), wenn die Prozesse vollständig getrennt wären, also z.B. auf verschiedenen Rechnern im Netzwerk oder so.
Dann könnten der Arbeitsshread im Server und die
GUI im Client natürlich nicht aufeinander zugreifen. Dann wäre im Client ein Timer oder Thread erforderlich, der die neuen Daten abfordert und zeichnet.
Das ist ja aber hier nicht gegeben.
Erkläre doch mal, warum Du nicht MyForm.ShowProgressValue(Value) synchronisiert aufrufen willst. Das ist doch die einfachste und sauberste Lösung (wobei es mit einem Event noch sauberer, aber etwas aufwendiger wäre).