[System.Windows.Froms.Timer über Event starten ->Ticks werden nicht ausgeführt]
-
Hi,
ich sehe gerade Wald vor lauter Bäumen nicht und
weiß nicht was ich falsch mache, vielleicht hat ja
einer ein Tipp.
Ich verwende eine Klasse
um diverse Daten zu halten die ein event deklariert:Class Foo { //... public event startTimerEventHandler startTimerEvent; //... } //... public delegate void startTimerEventHandler(object sender,EventArgs args); //...
beim erzeugen der Foo-Objekte in meinen Windoes.Form
weiße ich den Event folgende funktion zu//... FooObj.startTimerEvent += new startTimerEventHandler(this.eventStartTimer); //...
in der eventStartTimer() Funktion setze ich einfach mein mein Timer
Objekt auf enabledmTimer.Enabled = true;
Das TimerObj initialisiere ich in Konstruktor
meines Form-Klasse:mTimer = new System.Windows.Forms.Timer(); mTimer.Enabled = false; mTimer.Interval = 2500; mTimer.Tick += new System.EventHandler(this.eventTimerTick);
Wenn ich jetzt den Event aus der FooKlasse anschiebe
wird zwar der Timer auf Enabled gestellt, mit den
Debugger sehe ich, dass er den Code auch ausführt wird, allerdings
wird die Tick-Funktion nie ausgeführt.
Wenn ich allerdings den Timer gleich im Konstruktor auf
enabled stell in meinen Forms-Klasse, dann wird der Tick brav
ausgeführt.
Hat einer eine Idee was ich falsch mache?
Viele Grüße
-
ok hab es jetzt doch gefunden
Anscheinend war ich nicht ganz Threadsicher und in einen anderen
Thread unterwegs hab es jetzt so gelöst:private void eventStartTimer(object sender, EventArgs e) { startTimer(); } private void startTimer() { if (this.InvokeRequired) this.Invoke(new MethodInvoker(this.startTimer)); else { initializeTimer(); if (!mTimer.Enabled) { mTimer.Enabled = true; } } }
jetzt rennt er
-
Wenn du jedoch unabhängig von der zugrunde liegenden API, ob nun Forms oder WPF, einen Timer starten willst, nimm dazu lieber System.Threading.Timer. Dann brauchst du keine Nachrichtensschleife wie beim Forms-Timer