c# - In what time interval is the conditions in a while clause checked? -
how wait specified time while showing remaining time wait?
i solved feel bad way it:
//this running in backgroundworker: stopwatch watch = new stopwatch(); watch.start(); while(watch.elapsedmilliseconds != secondstowait * 1000) { timetonextrefresh = ((secondstowait * 1000) - watch.elapsedmilliseconds) / 1000; thread.sleep(1); } watch.stop();
so here guessing condition (watch.elapsedmilliseconds != secondstowait * 1000
) checked every millisecond.
so main question is; in period condition of while checked and/or how improve code i've written?
it depends on what's code inside while loop!
for example, if write long/time-consuming code in while loop, each iteration of while loop, or course, longer while loop has short/fast code.
compare these 2 while loops:
while (true) { console.writeline("hello"); }
and
while (true) { console.beep(5000); }
each iteration of first while loop faster of second 1 because console.beep(5000)
takes 5 seconds , console.writeline
takes fraction of second.
so can't rely on while loops count time.
this should do:
create instance of system.windows.forms.timer
, not system.timers.timer
nor system.threading.timer
. find first 1 useful (others more advanced).
timer timer = new timer(); timer.interval = 1000; // 1000 means 1000ms aka 1 second timer.tick += timerticked; timer.start();
now compiler tell timerticked
not defined, let's go define that:
private void timerticked(object sender, eventargs e) { }
now you're set. code in timerticked
called every 1 second.
let's want measure time of 10 seconds. after 10 seconds, want something. first create variable called secondsleft
in class level:
int secondsleft = 10;
now in timerticked
, want check whether secondsleft
0. if is, something, else, minus one:
if (secondsleft == 0) { dosomething(); } else { secondsleft--; }
and secondsleft
is time remaining! can display on label or something.
to pause timer, simply
timer.stop();
Comments
Post a Comment