如何在C#中进行异步暂停?

时间:2011-10-24 05:42:03

标签: c# .net visual-studio loops

我有一个用C#(Visual Studio)编写的程序,可以在托盘上运行。 我希望它每10分钟做一次动作。 我现在有以下代码:

while(true)
{
Thread.Sleep(10000);
// my stuff
}

但它不起作用。它冻结了一个程序。

3 个答案:

答案 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分钟触发一次动作的计时器

秒。 Task.StartNew()ThreadPool