C# Eigenschaft von anderer Klasse überwachen (Änderungen)

Ghost_Rider_R

Lieutenant
Registriert
Nov. 2009
Beiträge
752
Hallo zusammen,

wie überwacht man denn am elegantesten und ressourcenschonendsten eine Eigenschaft einer anderen Klasse, auf die man selbst keinen Einfluss hat? D.h. ich kann die zu überwachende Klasse / Eigenschaft selbst nicht ändern, sondern nur auslesen!

Momentan würde ich sowas machen, aber vielleicht gibt es da ja was besseres, insbesondere um Strom zu sparen:

while(eineKlasse.Status == Eigenschaften.Aktiv)
Thread.Sleep(1);
//Die Variable hat sich geändert, mach irgendwas.

Oder ist Thread.Sleep(1) für den Stromverbrauch vernachlässigbar? die Auslastung im Taskmanaager geht dabei ja gegen 0, wird aber trotzdem bis zu 1.000x pro Sekunde ausgeführt.

Vielen Dank schon mal für eure Ideen.

LG Ghost Rider
 
Das Optimum wäre natürlich es gäbe ein Event an dass Du dich hängen kannst, dass bei Änderung ausgelöst wird und damit deinen Code triggert.

Wenn du pollen musst weil es nix anderes gibt ist halt die Frage: wie oft wird sich da was ändern und wie schnell musst du darauf reagieren?
Danach richtet sich dann dein Polling-Intervall.
 
  • Gefällt mir
Reaktionen: Ghost_Rider_R und andy_0
Ich glaube da gibt es keinen Event, es ist also auch eher eine allgemeine Frage. Ist hier der Way 2 Go dann tatsächlich wie von mir im Beispiel genannt das permanente Prüfen und kurz warten (Intervall nach Bedarf)?
 
Eine andere sinnvolle fällt mir da nicht ein. Wie @guzzisti gesagt hat, stellt sich beim Polling die Frage nach dem Aktualisierungsintervall d.h. 1ms ist schon häufig, vlt reicht dir auch 20ms oder ähnliches.

Theoretisch könntest du Code injecten um damit Änderungen an der Property via Event abzugreifen, aber das ist totaler Overkill.
 
  • Gefällt mir
Reaktionen: Ghost_Rider_R
Je nachdem wie viel Einfluss Du auf das Gesamtsystem hast, könntest Du auch einen Proxy um die Klasse bauen und alle Changes da durch leiten. Das wäre relativ einfach.
 
  • Gefällt mir
Reaktionen: BeBur
Also ich würde von der Klasse ableiten, ein Change Event einbauen, den Setter der Eigenschaft überschreiben
und das Change Event auslösen. Geht natürlich nur, wenn der Setter nicht private ist.
 
  • Gefällt mir
Reaktionen: cfHxqA und Ghost_Rider_R
@Drexel das mag aber auch nur mit dem Proxy gehen, wenn es nicht viele Funktionen/Eigenschaften sind ODER mittels Reflektion => Overkill.

@umask007 dafür müsste die Klasse aber auch Vererbbar sein. Andernfalls musst wieder eine Instanz der Klasse halten, in einer neuen und dort dann Ableiten.
 
Zurück
Oben