Der Copy Ansatz ist ja in etwa ähnlich zu Methode "2" aus meinem ersten Post. Nur dass ich die Daten in meiner Proxy Klasse nur "on demand" (sobald von außen jemand lesen will) kopieren würde und nicht bei jeder Aktualisierung (der Thread kann durchaus mehrere 1000 Aktualisierungen pro Sekunde und in verschiedenen Tasks erzeugen, da die Tasks nicht strikt nacheinander, sondern jeweils in kleinen Portionen per Round Robin abgearbeitet werden).
Wobei ich das Interface verwenden würde, weil Grundkenntnisse sollte man dem Anwender schon zumuten
Bisher tendiere ich auch immer noch zu den Interfaces. Die meisten Daten werden vom Thread geschrieben und können nach außen hin nur gelesen werden, weshalb sich hier die Synchronisierung sowieso erledigt. Bei den wenigen anderen Werten (eigentlich nur ein Wert, der steuert, ob der Task abgebrochen oder angehalten werden soll), die in beide Richtungen auch geschrieben werden können, sichere ich dann einfach den Setter mit einer Critical Section ab. Den Getter brauche ich ja theoretisch nicht schützen, da es fürs Monitoring nicht von Relevanz ist, ob der Wert sich jetzt ein paar Milisekunden später erst aktualisiert.