开发者

Set interval in never ending while loop without using Thread.Sleep in C#.net?

int i = 0;
while (i < 11)
{
    Console.Write开发者_运维技巧Line(i.ToString());
    i++;
    System.Threading.Thread.Sleep(100);
    if (i >10)
    {
        i = 0;
    }
}

You know what it does. It prints 0 to 10 unlimited times at every 100 milisecond interval.

I want this to be implemented in Windows Form. But Thread.Sleep() actually paralyze the GUI.

I've heard of timer but i haven't figured out good method to do this job using timer. Any help will be appreciated.


You say you want to implement in Windows Forms but use Console to output the information. Ignoring that, you should add a System.Windows.Forms.Timer to the respective form, enable it and set it's tick interval to 100ms.

In the Tick event handler you should print your output to the form. The Tick event handler of the System.Windows.Forms.Timer runs in the UI thread so you have complete access to your form.


As you suspect, you need to use a timer.
You'll need to move the loop body into the timer callback.

To stop the loop, call Timer.Stop in an if block.

Alternatively, you could move your code to a background thread.
However, the code would not be able to interact with the UI, and you'll need to deal with thread safety.


Have a look into Reactive Extensions for a nice timer that you can compose and filter every x iterations.

var timer = Observable.Timer(TimeSpan.FromMilliseconds(100));
timer.Subscribe(tick => Console.WriteLine((tick%10).ToString()));


Use this to make your interval loop

while (1 > 0)
    {
          Console.WriteLine("do the job");
          System.Threading.Thread.Sleep(10000);//10 seconds
    }
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜