如何安排事件,例如我需要调用一个应该在每个给定秒内执行其操作的方法。我正在开发简单的Windows窗体应用程序,我尝试使用像
while(true)
{
methodToBeScheduled();
Thread.Sleep(60000);
}
这段特殊的代码使我的应用程序在执行时“无响应”。我希望计时器可以做到这一点或你专家建议的任何其他逻辑,请告诉我。
谢谢!
答案 0 :(得分:2)
您可以使用WinForms timer:
Timer _timer;
// In constructor (or anywhere you want to start the timer, e.g. a button event):
_timer = new Timer();
_timer.Interval = 60000; // milliseconds
_timer.Tick += (sender, e) => methodToBeScheduled();
_timer.Start();
这将导致{60}每60秒调用一次methodToBeScheduled
。它将在主UI线程上调用,因此请避免在其中进行任何繁重的处理。
使用此计时器的优点是它内置,不需要线程同步,并且易于使用。缺点是间隔不准确 - 实际间隔将根据应用程序中需要处理的其他消息而变化,并且也受Windows系统时钟的限制,只能精确到10-20ms或如此。
答案 1 :(得分:1)
您可以使用Timer
(System.Threading.Timer)。
using System;
using System.Threading;
Timer _timer = null;
_timer = new Timer(o =>
{
methodToBeScheduled();
});
_timer.Change(TimeSpan.Zero, TimeSpan.FromSeconds(60));
答案 2 :(得分:1)
Var sequence = Observable.interval(1).publish Sequence.subscribe ....
允许订阅一个可以每秒触发onnext的observable。见反应性扩展..
在iPad上讨厌打字....
答案 3 :(得分:0)
是的,.net中有三种不同类型的计时器(所有这些计时器都被命名为Timer,但行为略有不同)。 windows.forms计时器以一定的速率执行一个函数 - 它从UI线程调用该函数。 System.Threading Timer执行相同操作但从另一个线程调用该函数。还有另一个我不记得的计时器了。你必须根据自己的情况选择其中一个。
线程计时器是我的最爱。如果使用它,Here就是一个例子。请记住,无论您调用的是什么,都不是从UI线程完成的。如果这是一个问题,可能想要使用表单计时器或同步事物。