Hallo, ich bin auf ein Problem im Zusammenhang mit dem Timer gestoßen. hoffe jemand kann helfen ..
Thread thread1 = new Thread(new ParameterizedThreadStart( execute2));
thread1.Start(externalFileParams);
.
public void execute2(Object ob)
{
if (ob is ExternalFileParams)
{
if (boolean_variable== true)
executeMyMethod();//this also executes very well if condition is true
else
{
timer1.enabled = true;
timer1.start();
}
}
}
}
5 aber das Tick-Ereignis des Timers wird nicht ausgelöst
Ich arbeite an VS2008 3.5 Framework. Ich habe den Timer aus der Toolbox gezogen und seine Interval
auf 300 gesetzt. Ich habe auch versucht, Enabled
zu setzen. Die Methode true/false ist timer1_Tick(Object sender , EventArgs e)
, aber sie wird nicht ausgelöst
kann jemand vorschlagen, was ich falsch mache?
Sie könnten versuchen, den Timer auf diese Weise zu starten:
Fügen Sie im Formularkonstruktor Folgendes hinzu:
System.Timers.Timer aTimer = new System.Timers.Timer();
aTimer.Elapsed += new ElapsedEventHandler(OnTimedEvent);
// Set the Interval to 1 second.
aTimer.Interval = 1000;
Fügen Sie diese Methode zu Form1 hinzu:
private static void OnTimedEvent(object source, ElapsedEventArgs e)
{
//do something with the timer
}
Klicken Sie auf Ereignis, und fügen Sie Folgendes hinzu:
aTimer.Enabled = true;
Dieser Timer ist bereits eingefädelt, sodass kein neuer Thread gestartet werden muss.
Es ist wahr, was Matías Fidemraizer sagt. Aber es gibt eine Arbeit um ...
Wenn Sie ein Steuerelement in Ihrem Formular haben, das aufgerufen werden kann (z. B. eine Statusleiste), rufen Sie einfach dieses auf!
C # Codebeispiel:
private void Form1_Load(object sender, EventArgs e)
{
Thread sampleThread = new Thread(delegate()
{
// Invoke your control like this
this.statusStrip1.Invoke(new MethodInvoker(delegate()
{
timer1.Start();
}));
});
sampleThread.Start();
}
private void timer1_Tick(object sender, EventArgs e)
{
MessageBox.Show("I just ticked!");
}
System.Windows.Forms.Timer funktioniert in einer Single-Threaded-Anwendung.
Überprüfen Sie diesen Link:
Bemerkungen sagen:
Ein Timer wird verwendet, um ein Ereignis in benutzerdefinierten Intervallen auszulösen. Dieser Windows-Zeitgeber wurde für eine Umgebung mit einem Thread entwickelt, in der Benutzeroberflächenthreads zum Ausführen der Verarbeitung verwendet werden. Es ist erforderlich, dass der Benutzercode über eine UI-Nachrichtenpumpe verfügt und immer von demselben Thread aus arbeitet oder den Aufruf auf einen anderen Thread verteilt.
Wenn Sie den Abschnitt "Hinweise" lesen, empfiehlt Microsoft, diesen Timer zu verwenden, um ihn mit dem UI-Thread zu synchronisieren.
Ich würde einen BackgroundWorker (anstelle eines raw thread) verwenden. Der Haupt-Thread würde das RunWorkerCompleted-Ereignis des Workers abonnieren : Das Ereignis wird in Ihrem Haupt-Thread ausgelöst, wenn der Thread abgeschlossen ist. Verwenden Sie diese Ereignisbehandlungsroutine, um den Timer neu zu starten.