我有一个用C#(Visual Studio)编写的程序,可以在托盘上运行。 我希望它每10分钟做一次动作。 我现在有以下代码:
while(true)
{
Thread.Sleep(10000);
// my stuff
}
但它不起作用。它冻结了一个程序。
答案 0 :(得分:6)
您应该使用计时器对象而不是创建while循环。
System.Timers.Timer _timer = new System.Timers.Timer();
_timer.Elapsed += new ElapsedEventHandler(_timer_Elapsed);
//30 seconds
_timer.Interval = 30000;
_timer.Start();
private void _timer_Elapsed(object sender, ElapsedEventArgs e)
{
//do your logic
}
答案 1 :(得分:2)
Thread.Sleep使调用thead Sleep休眠了X分钟。如果这个线程是前端线程(负责处理消息的线程),它确实会冻结应用程序,因为处理事件或重新绘制的任何消息都不会被处理,直到线程再次唤醒并有机会处理消息。
你应该做的是每隔10秒安排一次这个逻辑。
在表单上删除一个计时器,并将其指定为每10秒运行一次。在Tick事件中,调用自定义操作。
答案 2 :(得分:1)
Thread.Sleep“停止”当前线程。如果你只有一个帖子,那么一切都会暂停。
你想要达到什么目的?
也许你需要第二个线程,或者更好的解决方案是一个每10分钟触发一次动作的计时器