C# - Timer kann nicht gestoppt werden

Gast #2860065
Lesenswert?

Hi,

folgendes Problem habe ich in meiner C# Applikation. Ich benutzte einen 
Timer mit einem EventHandler. Für die Synchronisation zwischen C# 
Applikation und der GUI wird die Methode Invoke eingesetzt.
1
        delegate void InvokeProc();
2
        System.Timers.Timer Timer;
3

4
        public Form()
5
        {
6
            this.Timer          = new System.Timers.Timer();
7
            this.Timer.Interval = 2;
8
            this.Timer.Elapsed += new ElapsedEventHandler(TimerEvent);
9
            this.Timer.Enabled  = false;
10
        }
11

12
        public void TimerEvent(object sender, ElapsedEventArgs e)
13
        {
14
            try
15
            {
16
                this.Invoke(new InvokeProc(OnTimer));
17
            }
18
            catch { };
19
        }
20

21
        public void OnTimer()
22
        {
23

24
          // do somthing //
25
        }

Egal was ich tue den Timer kann ich nicht stoppen.
1
this.Timer.Dispose();
2
this.Timer.Stop();
3
this.Timer.Enables = false;

Alle drei Möglichkeiten habe ich ausprobiert. Woran könnte dies liegen ? 
Gibt es eine Möglichkeit den Timer überhaupt zu stoppen ?
Gast #2860121
Lesenswert?

Hi paula

Ich glaube dein Problem liegt darin dass du den Timer in einer anderen 
Klasse startest. Schau mal wie die Modifier des Timers gesetzt sind. 
Ausserdem solltest du dir im Klaren darüber sein dass du im Konstruktor 
den Timer schon wieder disablest ohne dass er je laufen kann. Das von 
dir beschriebene Verhalten soltle also gar nicht auftreten können.

Ausserdem hast du einen Schreibfehler beim zweiten geposteten Codeblock. 
Der Command heisst Enabled! nicht EnableS... Wenn du mit Visual Studio 
arbeitest solltest du zuerst auf Syntaxfehler prüfen. Ein bekannter 
Fehler ist, wenn wie oben Fehler im Code sind und einfach eine alte 
Version ausgeführt wird.
Kannst du das mal nachprüfen? ;-)

Gruss

Farin
#2860296
Lesenswert?

1
public partial class Form1 : Form
2
{     
3
    delegate void InvokeProc();
4
    Timer t;
5

6
    int c = 0;
7

8
    public Form1()
9
    {
10
        t = new Timer();
11
        t.Interval = 2;
12
        t.Tick += new EventHandler(TimerEvent);
13
        t.Enabled  = true;
14
    }
15

16
    public void TimerEvent(object senden, EventArgs e)
17
    {
18
        try
19
        {
20
            this.Invoke(new InvokeProc(OnTimer));
21
        }
22
        catch { };
23
    }
24

25
    public void OnTimer()
26
    {
27
        // do somthing //
28

29
        // example term
30
        c++;                     
31
        if (c > 5)
32
        {
33
            t.Enabled = false;  // stop timer
34
            t.Dispose();        // disposing timer object
35
        }
36
        else
37
        {
38
            MessageBox.Show("c = " + c.ToString());
39
        }            
40
    }
41

42
    private void Form1_Load(object sender, EventArgs e)
43
    {
44

45
    }
46
}

So gehts. Viel Spass damit =)

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren