Entwickler-Ecke

WinForms - Timer endet nie?!


Sweetiieh - Mo 09.04.12 17:56
Titel: Timer endet nie?!
Hallo Community,

leider muss ich euch nochmal nerven :P Ich habe follgendes Problem.
Ich habe in mein Programm einen Timer eingebaut, der einmal direckt am Anfang nach 100 ms ein Bild nach unten verschiebt.
Jedoch tut er dies immer & endet nie. Ich habe es schon mit einer timer.stop versucht funktioniert nicht.


C#-Quelltext
1:
2:
3:
public Form1()
        {InitializeComponent();
         Fallen();}


C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
       private void Fallen() 
        { 
           if (pictureBox1.Location == new Point(1212)) //es soll doch nur ausgeführt werden wenn bedingung wahr ist?!
            {
                Timer zeit = new Timer(); 
                zeit.Interval = 100;
                zeit.Start();                
                zeit.Tick += new EventHandler(down); 
            }
        }

        private void down(object sender, EventArgs e) 
        {
            { y = y + 2; pictureBox1.Location = new Point(x, y); zeit.Stop(); } 
        }


daeve - Mo 09.04.12 18:04

und wie wolltest du den Timer stoppen ? im mom. startest du ihn nur.

deine if abfrage bringt so nichts... den wenn du den Timer startets läuft der in einem anderen Thread.


Sweetiieh - Mo 09.04.12 18:12

ja ich dachte das  zeit.Stop(); dies tun würde. Kannst du mir dann den Befehl dafür geben, wie ich den timer Stoppen kann?


daeve - Mo 09.04.12 18:16

user profile iconSweetiieh hat folgendes geschrieben Zum zitierten Posting springen:
ja ich dachte das  zeit.Stop(); dies tun würde. Kannst du mir dann den Befehl dafür geben, wie ich den timer Stoppen kann?

das ist auch richtig, wo wolltest du den dein Timer stoppen, im Code ? hast du mal dein Code "gedebuggt" und wurde diese Zeile erreicht mit timer.stop() ?

am besten du deklariert den Timer als Klassenvariable und im Event das ausgelöst wird stoppst du den Timer wider.


Ralf Jansen - Mo 09.04.12 18:47

Die Doku [http://msdn.microsoft.com/en-us/library/system.windows.forms.timer.tick.aspx] enthält wie oft ein passendes Beispiel. Wenn du es genau so machst sollte es auch funktionieren. Ansonsten Code zeigen.
Zitat:
den wenn du den Timer startets läuft der in einem anderen Thread.

Ist offensichtlich der Winforms Timer. Da läuft der Event nicht in einem anderen Thread.


daeve - Mo 09.04.12 18:53

user profile iconRalf Jansen hat folgendes geschrieben Zum zitierten Posting springen:
Die Doku [http://msdn.microsoft.com/en-us/library/system.windows.forms.timer.tick.aspx] enthält wie oft ein passendes Beispiel. Wenn du es genau so machst sollte es auch funktionieren. Ansonsten Code zeigen.
Zitat:
den wenn du den Timer startets läuft der in einem anderen Thread.

Ist offensichtlich der Winforms Timer. Da läuft der Event nicht in einem anderen Thread.


ja das stimmt natürlich beim Winforms Timer.


Troubadix - Di 10.04.12 16:14

Bei mir lässt sich der Codeausschnitt nicht kompilieren!

Du hast offensichtlich zwei Timer in deiner Form die beide zeit heißen.
Einen hast du wahrscheinlich aus der Toolbox in die Form gezogen.
Und den zweiten erzeugst Du innerhalb der IF-Abfrage mit Timer zeit = new Timer();
Den zweiten Timer startest du dann auch und registrierst Dein Event, da er den für die Form gültigen Timer überdeckt.
Tritt das Event ein ist diese Variable zeit aus der IF-Abfrage aber nicht mehr gültig. Innerhalb des Event stoppst du dann den Timer zeit der Form, den du aber nie gestartet hast.

Probier mal das hier aus:

C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
       private void Fallen() 
        { 
           if (pictureBox1.Location == new Point(1212)) //es soll doch nur ausgeführt werden wenn bedingung wahr ist?!
            {
                //Timer zeit = new Timer(); 
                zeit.Interval = 100;
                zeit.Start();                
                zeit.Tick += new EventHandler(down); 
            }
        }


Gruß
Troubadix