Variablen Überwachen

Meldur

Erfahrenes Mitglied
Hallo! Ich bastel hier schon eine ganze Weile, aber ich finde einfach nicht heraus, wie ich in C# eine Variable überwachen kann? Es soll quasie ein OnChange-Event ausgelöst werden, sobald eine bestimmte Variable verändert wird. Hat jemand ne Idee? Danke, Peter
 

Alexander12

Erfahrenes Mitglied
Hi.

Bau nen Timer ein.
Etwa so:

Code:
public int VARIABLE = 1;   // Das ist die zu Überprüfende Variable

private voit tmr_Timer_Tick(object sender, EventArgs e)
{
         if(VARIABLE == 1)
         {
                 // Hier kannst sagen was passiert, wenn die Variable 1 etc. hat
         }
         else
         {
                // Hier ist dann das "On-Change"-Event
         }

// Das kannst du auch mit switch etc. aufbauen.
// Oder du kannst das if-Konstrukt noch mit else if
// erweitern.
// Das TimerInterval stellst dann noch auf 1 Millisekunde ein, dann hasts ganz
// präzise
}

Hoffe geholfen zu haben. ;)


MfG Alexander12
 

Alexander Schuc

crazy-weasel
Hi.

Ist diese Variable in einer "fremden" Bibliothek, oder ists eine Variable welche du selbst in irgend einem eigenen Projekt hast?

Wenn es was eigenes ist, kannst du ja das setzen der Variable über eine Eigenschaft lösen, und dort dann ein Event feuern.

Falls das nicht geht, und du diese Timer-Variante benutzen willst, solltest es noch ein wenig umbauen.
Das Überprüfen auf einen fixen Wert ist etwas unpraktisch, daher solltest du wirklich schauen ob eine Veränderung stattfindet.

Code:
private object lastValue = null;
private void startTimer()
{
	lastValue = someObj.SomeField;
	checkTimer.Enabled = true;
}

private void checkTimer_Tick(object sender, EventArgs e)
{
	if (someObj.SomeField != lastValue)
	{
		// event feuern..

		lastValue = someObj.SomeField;
	}
}

Das Intervall auf 1 Milisekunde setzen ist aus 2 Gründen nicht die beste Idee:
  • Zu hohe Auslastung
  • Der normale WindowsForms Timer ist für so ein Intervall zu langsam


MfG,
Alex
 

Meldur

Erfahrenes Mitglied
aha - die timer-funktion kannte ich bisher noch nicht und "ja" - die variable ist in einer meiner eigenen klasse drinn. aber wird das denn in den standart form-objekten genau so gemacht? eigentlich ist diese variante ziemlich unschick. also ich versuch's auf jeden fall erstmal so. vielen dank :)
 

Christian Kusmanow

Erfahrenes Mitglied
Alexander Schuc hat gesagt.:
Falls das nicht geht, und du diese Timer-Variante benutzen willst, solltest es noch ein wenig umbauen.
Das Überprüfen auf einen fixen Wert ist etwas unpraktisch, daher solltest du wirklich schauen ob eine Veränderung stattfindet.
Hallo Alex!
Hallo Meldur!

Ich möcht mal was loswerden,
was ich mich jetzt frage als ich den Thread grad gelesen hab.
Ist es nicht eine Ressourcenverschwendung ausgerechnet
einen Timer für das überwachen einer Variable zu verwenden? :confused:
Ich find er sollte die Logik innerhalb der Klasse lassen,
welche dann das Event innerhalb der Propertydefinition auslöst.
Somit hat er alles an einer Stelle und OOP grecht getrennt.

Btw. [thread=219377]Eigene Eventhandler .... - Thread[/thread]

@Meldur: Bitte an die Netiquette halten. :)