Hallo liebe Community,
ich will folgendes machen: Nach einer zufälligen Zeit zwischen 300 und 3000 Millisekunden soll etwas ausgeführt werden (In diesem Fall eine Ausgabe an der Console). Ich wollte wissen, was an meiner Denkweise falsch ist, bzw. wie man das hier richtig lösen könnte.
Random random = new Random();
TimeSpan startAction = new TimeSpan();
DateTime start = new DateTime();
startAction = TimeSpan.FromMilliseconds(random.Next(300, 3000));
start = DateTime.Now + startAction;
while (true)
{
if (DateTime.Now == start)
{
Console.WriteLine("\tHallo Welt");
break;
}
}
edit: Ich weiß, dass ich es auch mit einem Timer lösen könnte, jedoch würde mich interessieren was an diesem Code programmtechnisch nicht funktioniert
Danke schonmal im voraus!
Mit freundliche Grüßen
Jonas
if (DateTime.Now == start)
Dieser Fall mit wird (mit großer Wahrscheinlichkeit) nie eintreten.
Verwende lieber einen Timer.
Weeks of programming can save you hours of planning
Das funktioniert nicht, weil DateTime in zu kleinen Dimensionen rechnet.
Du hast vermutlich deinen Start schon übersprungen, ohne es zu merken.
Zum Zeit messen ist Stopwatch besser, oder Du nutzt "≥"
Oder eben der Timer
NuGet Packages im Code auslesen
lock Alternative für async/await
Beim CleanCode zählen nicht die Regeln, sondern dass wir uns mit diesen Regeln befassen, selbst wenn wir sie nicht befolgen - hoffentlich nach reiflichen Überlegungen.
Oder den bösen Befehl Sleep :
Thread.Sleep(random.Next(300, 3000));
Grüße Bernd
Workshop : Datenbanken mit ADO.NET
Xamarin Mobile App : Finderwille Einsatz App
Unternehmenssoftware : Quasar-3
Ich wäre auch für einen Timer. So eine Schleife fühlt sich überhaupt nicht gut an 😉 Mit einem Timer kann man ja dann die Ausgabe erzeugen und gleich das Interval ändern. Finde ich eleganter.