Frage Timer nur einmal verwenden


Ich möchte einen Timer nur einmal verwenden, 1 Sekunde nach der Initialisierung meines Hauptformulars. Ich dachte, das Folgende würde nur einmal ein Nachrichtenfeld mit der Aufschrift "Hello World" enthalten, aber tatsächlich würde jede Sekunde eine neue Nachrichtenbox "Hello World" sagen.

Warum? Ich habe gelegt t.Stop() im Tick-Ereignis. Muss ich den Timer auch irgendwie entsorgen, um Speicherverlust zu vermeiden?

        Timer t = new Timer();
        t.Interval = 1000;                
        t.Tick += delegate(System.Object o, System.EventArgs e)
                        { MessageBox.Show("Hello World"); t.Stop(); };

        t.Start();   

Bitte helfen Sie und zeigen Sie, ob es einen besseren Weg gibt, dies zu tun? Vielen Dank.


8
2018-05-15 18:04


Ursprung


Antworten:


Ersetzen MessageBox.Show("Hello World"); t.Stop(); mit t.Stop();MessageBox.Show("Hello World");. Da Sie nicht rechtzeitig auf OK drücken, hat der Timer bereits wieder angekreuzt und Sie haben den Stoppcode nie erreicht.


9
2018-05-15 18:09



Stellen t.Stop(); Vor dem MessageBox.Show("Hellow World");


2
2018-05-15 18:11



Sie können dies auch mit System.Timers.Timer erreichen und AutoReset auf false setzen. Ich habe untersucht, welcher Timer zu verwenden ist und bevorzuge diesen, da es keinen separaten Stoppbefehl benötigt.

using System;
using System.IO;
using System.Timers;

System.Timers.Timer t = new System.Timers.Timer() {
    Interval = 1000,
    AutoReset = false
};

t.Elapsed  += delegate(System.Object o, System.Timers.ElapsedEventArgs e)
    { Console.WriteLine("Hell");}; 
t.Start();

1
2018-06-22 10:36