C# Timeout vor Event

DK1FiWa

Grünschnabel
Hi,

es ist sicher eine ganz einfache Sache, aber irgendwie klappt es bei mir nicht so recht....
Und zwar will ich einfach ein Timeout starten, bevor mein Code weitergeht. Ich will quasi eine Funktion mit einem Hinweis-Panel aufrufen und dieses Panel soll x Sekunden lang sichtbar sein, bevor es auf visible false geschalten wird.

Ich hab mich schon ein bisschen zum Timer belesen aber alles was ich versucht hatte, hat nicht geklappt...insofern, dass der garnicht die Zeit angehalten hat.

Hoffe mir kann jemand helfen
Danke im vorraus
 
Hallo,

ist der Code, der ausgeführt wird in einem anderen Thread?

Wenn nein, musst du entweder den ersten Teil des Codes bis zum Anzeigen des Panels und den Code, der danach ausgeführt wird, trennen (erste Möglichkeit), oder das Form ist bis dahin blockiert (zweite Möglichkeit).

Die erste Möglichkeit macht man am besten mit einem Timer.
Am Ende des ersten Teils von dem Code zeigst du das Hinweis-Panel an und startest den Timer mit timer.Start() (timer natürlich mit der entsprechenden Variable ersetzen) und setzt timer.Interval auf die Zeit, nach der das Panel verschwinden soll (in Millisekunden).
Im Tick-Event von dem Timer hältst du den Timer mit timer.Stop() an, blendest den Hinweis-Panel aus und führst den zweiten Teil des Codes aus.

Für die zweite Möglichkeit kann der Code in einem Teil sein. Dort, wo das Panel angezeigt werden soll, zeigst du das Panel an und machst ein Thread.Sleep() mit der entsprechenden Zeit, wie lange das Panel angezeigt werden soll (in Millisekunden). Danach blendest du das Panel wieder aus und der restliche Code wird ausgeführt.


Wenn du das ganze in einem anderen Thread hast, kannst du das ganze genauso wie in der zweiten Möglichkeit machen, du musst nur beim Anzeigen des Hinweis-Panels den Code zum Anzeigen und Verstecken in das Form invoken:
Code:
MethodInvoker mi = delegate()
{
	hinweis.Visible = true; // Hinweis-Panel anzeigen
}
this.Invoke(mi); // in das Form invoken
Das gleiche wieder so beim Verstecken machen, aber nicht das Thread.Sleep mit invoken, sonst ist das Form blockiert.

MfG
Fabsch
 
Zurück