[英]Set interval in never ending while loop without using Thread.Sleep in C#.net?
int i = 0;
while (i < 11)
{
Console.WriteLine(i.ToString());
i++;
System.Threading.Thread.Sleep(100);
if (i >10)
{
i = 0;
}
}
你知道它做什么。 每100毫秒间隔打印0到10次无限制时间。
我希望这可以在Windows窗体中实现。 但是Thread.Sleep()
实际上使GUI瘫痪了。
我听说过计时器,但是我还没有找到使用计时器完成此工作的好方法。 任何帮助将不胜感激。
您说要在Windows窗体中实现,但要使用控制台输出信息。 忽略这一点,您应该将System.Windows.Forms.Timer
添加到相应的窗体,启用它并将其刻度间隔设置为100ms。
在Tick事件处理程序中,应将输出打印到表单。 System.Windows.Forms.Timer
的Tick事件处理程序在UI线程中运行,因此您可以完全访问表单。
如您所怀疑,您需要使用计时器。
您需要将循环主体移到计时器回调中。
要停止循环,请在if
块中调用Timer.Stop
。
或者,您可以将代码移至后台线程。
但是,代码将无法与UI进行交互,因此您需要处理线程安全性。
使用它来使您的间隔循环
while (1 > 0)
{
Console.WriteLine("do the job");
System.Threading.Thread.Sleep(10000);//10 seconds
}
看看Reactive Extensions ,它是一个不错的计时器,您可以编写和过滤每x次迭代。
var timer = Observable.Timer(TimeSpan.FromMilliseconds(100));
timer.Subscribe(tick => Console.WriteLine((tick%10).ToString()));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.