Laden...

Countdown: nach x Minuten bestimmte Aktion auslösen

Erstellt von KRambo vor 19 Jahren Letzter Beitrag vor 19 Jahren 10.593 Views
K
KRambo Themenstarter:in
355 Beiträge seit 2004
vor 19 Jahren
Countdown: nach x Minuten bestimmte Aktion auslösen

Hallo ich hab da mal ne Frage und zwar brauch ich nen Coutdown, der von 30 oder 60min rückwärts zählt (darum Countdown) und dann ne Aktion auslöst. Nur wie kann ich das am besten anstellen??

Hab schon verschiedenste Beispiele angeschaut, nur alle zählen rauf, keiner hat irgendwie nen Countdown 🙁

333 Beiträge seit 2004
vor 19 Jahren

Das Prinzip ist ja ähnlich. Gibt aber verschiedene Möglichkeiten die Zeit zu messen. Entweder orrientiert man sich an der Systemzeit oder man liest den TickCount von Windows aus. Beides hat Vor- und Nachteile. Im normalfall nimmt man einfach die Systemzeit. Wenn du den Countdown startest merkst du dir einfach die aktuelle Zeit und addierst den Countdownzeitraum als TimeSpan. Das ist dann die Zeit an der der Countdown abläuft. Nun brauchst du nur noch bei der Anzeige die Systemzeit von der gespeicherten Zeit abzuziehen und rauskommt ein TimeSpan mit der verbleibenden Zeit.

([bb]|[^b]{2})

F
124 Beiträge seit 2004
vor 19 Jahren

wenn du programmieren ernsthaft fortsetzen willst, dann solltest du eigentlich in der lage sein, aus einer uhr, die rauf zählt, einen countdown zu machen, der runter zählt. und das ohne hier gleich nach hilfe zu schreien!

165 Beiträge seit 2004
vor 19 Jahren

@Fabse: Tolle Einstellung!

@KRambo: Ich würde es so machen, wie NoOneKnows es vorgeschlagen hat:


DateTime LeaseDateTime = DateTime.Now.AddHours(1);

Im Timer_Event:


TimeSpan TimeLeft = LeaseDateTime.Subtract(DateTime.Now);

Und dann kannnst Du mittels


TimeLeft.Hours / TimeLeft.Minutes / etc

die übrig gebliebene Zeit auslesen...

M
22 Beiträge seit 2004
vor 19 Jahren

Hi, bin zwar neu in C# hab aber ähnliches probiert.
Also nicht schimpfen, wenn ich mich nicht an die C# Sprachkonventionen halte.

Ich lese mir aus einem Listview Stringeinträge in der die Zeit incl. Datum steht, weil der Countdown ruhig mal länger dauern kann 😉, und zähle dann rückwärts:

Diese Routine wird durch einen Timer jede Sekunde angestoßen:

DateTime datZeit1 = System.DateTime.Now;
DateTime date2 = datZeit1;

this.lblUhrzeit.Text = datZeit1.ToLongTimeString();

string[] arrZeit;
arrZeit=this.lstWeckzeiten.SelectedItem.ToString().Split(new char[] {':',' ','.'},11);

int intTag = Convert.ToInt32(arrZeit[0]);
int intMonat = Convert.ToInt32(arrZeit[1]);
int intJahr = Convert.ToInt32(arrZeit[2]);

int intStunde = Convert.ToInt32(arrZeit[5]);
int intMinute = Convert.ToInt32(arrZeit[6]);
int intSekunde = Convert.ToInt32(arrZeit[7]);
string Ereignis = arrZeit[10];

// Datum aus Weckerzeit erstellen
date2 = new DateTime(intJahr, intMonat, intTag, intStunde, intMinute, intSekunde+1);

// Differenz Weckerzeit zu Systemzeit
System.TimeSpan diff1 = date2.Subtract(datZeit1);

if (diff1.TotalSeconds≤0)
{
}

wohl keine ideale lösung - aber bei mir läuft sie 😉

165 Beiträge seit 2004
vor 19 Jahren

Mach's so:

DateTime datZeit1 = System.DateTime.Now;
		
this.lblUhrzeit.Text  = datZeit1.ToLongTimeString();
			
// Datum aus Weckerzeit erstellen
DateTime date2 = DateTime.Parse(this.lstWeckzeiten.SelectedItem.ToString());
			
// Differenz Weckerzeit zu Systemzeit
System.TimeSpan diff1 = date2.Subtract(datZeit1);

if (diff1.TotalSeconds<=0)
{
}

M
22 Beiträge seit 2004
vor 19 Jahren

@ernie04
Wäre eine Lösung, nur "leider" steht im Listview nicht nur die Zeit, sondern auch das Ereignis, was dann passieren soll und das steht alles in einem kompletten String, den ich aus aus einer übergebenen XML Datei auslese, mit dem die ParseMethode so nix anfangen kann - also muss ich mir den formatierten String eh zerpflücken und für die ParseMethode formatieren -- aber mit der ArrayLösung habe ich den Vorteil, dass ich die einzelnen Teile des Strings innerhalb des "IF" weiternutzen kann -- für Ausgaben usw. denn bei mir geht es eher so weiter:
if (diff1.TotalSeconds≥0)

Weil mich die Zeit bis 0 interessiert 😉

165 Beiträge seit 2004
vor 19 Jahren

OK, dann hat mich Deine Lösung überzeugt 😉

K
KRambo Themenstarter:in
355 Beiträge seit 2004
vor 19 Jahren

Danke für die Hilfe! Werds mal probieren

@ Fabse:
Wieso sollte ich programmieren aufgeben? Nur weil ich mal nicht weiss, wie ich nen Countdown in C# machen kann? Ich programmiere hauptberuflich auch, nur halt nich C#, deshalb bin ich da immer am lernen

M
22 Beiträge seit 2004
vor 19 Jahren

@ernie04
Wie einfach wäre das Programmieren, wenn man sich nicht an Vorgaben von anderen halten müsste 😉

@KRambo
Kenn ich - man weiß genau, wie es in "seiner" Sprache geht aber genau den Befehl gibt es in C# leider nicht oder wird nur ein wenig anders angeprochen und man sucht ewig.

333 Beiträge seit 2004
vor 19 Jahren

@Martin R:
Hey, das is ja ungarische Notation. Schämst du dich denn garnich damit inner C#-Gemeinde aufzukreuzen 😉

@KRambo:
Fabse hat nicht ganz unrecht. Das Prinzip einer Stopuhr oder sowas in der Art sollte sich leicht auf einen Countdown übertragen lassen. Die Frage ist aber, in welcher Sprache du bis jetzt hauptsächlich programmiert hast!?

([bb]|[^b]{2})

M
22 Beiträge seit 2004
vor 19 Jahren

@NoOneKnows:

F
124 Beiträge seit 2004
vor 19 Jahren

erstmal hab ich nie gesagt, do sollst aufhören zu coden, sondern ich wollte dich dazuanhalten, länger zu versuchen, ein problem selbstständig zu lösen!

Hab schon verschiedenste Beispiele angeschaut, nur alle zählen rauf, keiner hat irgendwie nen Countdown 😦

^^im zweifelsfall könnte man in so einem beispiel eine zeile verändern; unter umständen sogar nur ein "+" zu einem "-" machen und dann hätte man schon nen simplen countdown-zähler!

für jemanden, der hauptberuflich programmiert, finde ich das doch recht arm.

und wenn dein eigentliches problem das parsen des strings oder das bekommen des strings aus der listbox ist, dann hast du deine frage falsch formuliert!

165 Beiträge seit 2004
vor 19 Jahren

@Fabse: Jetzt zügel Dich mal ein bisschen... Das ist janicht zum Aushalten... Wenn es Dich so stört, dass er eine Frage stellt, dann überlies es doch einfach, statt hier einen auf Oberlehrer zu machen. Ich glaube, dass jeder mal ein Brett vor dem Kopf haben kann oder aber auch mal einfach Hilfe braucht, um so einen Anstoss zu bekommen. Ich bin mir 100%ig sicher, dass Du am Anfang auch Deine Probleme hattest, die für andere super einfach waren, aber für Dich unüberwindbar waren.

Dürfte ich jetzt einen der Mods bitten, diesen Thread zu schließen? Danke...

K
KRambo Themenstarter:in
355 Beiträge seit 2004
vor 19 Jahren

Wenigstens gibts hier User die zu einem halten.

Ich progge beruflich in VB und VBA. Hobbiemäßig hatte ich schon PHP, C, C++, Delphi und VB hinter mir. Und seit ca. 2 Wochen mach ich C#.

Das Problem iss nich dass ich es nich schaffe einen Countdown zu machen, das Problem ist, dass ich dazu am einfachsten einfach die VB-Klasse aus dem Framework importieren und dann einfach die VB-Befehle nutzen könnte, dann wärs einfach. Nur möchte ich das nicht (son Gemisch der beiden Sprachen), sondern auf eine "professionelle" Art lösen.

Edit:
Habs jetzt geschafft. Danke für eure Hilfe! 😁

2.217 Beiträge seit 2003
vor 19 Jahren

Hallo Leutz,

also

Original von ernie04
@Fabse: Jetzt zügel Dich mal ein bisschen... Das ist janicht zum Aushalten

So jetzt hat sich jeder ein wenig "angeschissen" und ich würde sagen wir hören nun mal damit auf. Jeder hat mal bei 0 angefangen und deswegen würde ich solche äußerungen einfach lassen - ok?

Original von ernie04
Ich glaube, dass jeder mal ein Brett vor dem Kopf haben kann oder aber auch mal einfach Hilfe braucht, um so einen Anstoss zu bekommen.

Exakt

Original von ernie04
Dürfte ich jetzt einen der Mods bitten, diesen Thread zu schließen? Danke...

Threads werden bei uns grundsätzlich nicht geschlossen, es soll jeder noch die Möglichkeit haben sein Senf dazuzugeben auch wenn die Möglichkeit besteht, dass der Thread ausartet, aber ich setz einfach mal so viel Vertrauen in unsere Mitglieder, dass sie intelligent genug sind, dass so etwas nicht passiert.

Wie dem auch sei, zügelt (und das gilt für alle) bitte eure Äußerungen und denkt auch darüber nach was ihr schreibt. Das hier soll nicht so eine Community werden, in der bestimmte Leute aus jux zusammengeschissen werden oder ähnliches.

Aber wie dem auch sei, ich betrachte den Vorfall hier einfach als abgehakt. Es gibt wichtigeres mit unserer Zeit anzufangen - Probleme lösen 😉

Viele Grüße
Alexander

1.371 Beiträge seit 2004
vor 19 Jahren

Hi, warum macht ihr es denn so komplitziert mit Codezeilen ohne Ende?
Wenn er einen Countdown von 30/60 Minuten runter will, dann soll er einfach eine Integervariable mit dem Wert 30 oder 60 füllen und sich einen Timer auf 60000(ms) einstellen. Der zieht dann jede Minute(60000ms) 1 ab und prüft, ob er auf null steht,wenn ja, dann sind 30/60 Minuten rum, wenn nein dann eben noch nicht.

==============================
Wenn ichs wüsst', würd' ich nicht fragen!!! 😁
==============================

333 Beiträge seit 2004
vor 19 Jahren

@Maddinel:
Spielt zwar jetzt bei den Zeitabständen keine Rolle, aber bei deiner Methode leidet die Genauigkeit, da der Timer nicht ganz exakt läuft du jedoch davon ausgehst 🙂

([bb]|[^b]{2})

1.371 Beiträge seit 2004
vor 19 Jahren

Ja schon, aber für was soll der CountDown denn sein?
Ist der ganze Aufwand denn nötig nur damit der CountDown nachher dann nicht ein paar Millisekunden falsch läuft? Auf die Schnelle reicht es sicherlich.

==============================
Wenn ichs wüsst', würd' ich nicht fragen!!! 😁
==============================