我希望每20秒调用一次一个带有参数的方法,例如: public void ProcessPerson(IPerson person)
我已经阅读了不同的计时器选项,并想知道有没有人能推荐最有效的方法来实现这个目标?
此外,是否有一种方法可以保持参数的强类型,而不是使用 object 然后转换为 IPerson?
谢谢你的帮助。
我希望每20秒调用一次一个带有参数的方法,例如: public void ProcessPerson(IPerson person)
我已经阅读了不同的计时器选项,并想知道有没有人能推荐最有效的方法来实现这个目标?
此外,是否有一种方法可以保持参数的强类型,而不是使用 object 然后转换为 IPerson?
谢谢你的帮助。
System.Threading.Timer
:
提供了一种按照指定时间间隔执行方法的机制。
使用 TimerCallback 委托来指定 Timer 执行的方法。当 Timer 构造函数被调用时,必须指定 Timer 委托,并且不能改变。该方法不会在创建 Timer 的线程上执行,而是在由系统提供的 ThreadPool 线程上执行。
还有一个 System.Windows.Forms.Timer
:
实现了一个定时器,在用户定义的时间间隔内引发事件。此计时器经过优化,适用于 Windows Forms 应用程序,并且必须在窗口中使用。
这个 Windows 定时器是为单线程环境设计的,其中使用 UI 线程执行处理。
还有一个不要忘记 System.Timers.Timer
:
Timer 组件是一个基于服务器的计时器,允许您在应用程序中指定重复间隔,以便在 Elapsed 事件中引发。
基于服务器的 Timer 是为多线程环境下的工作线程设计的。服务器计时器可以在线程之间移动以处理引发的 Elapsed 事件,从而比 Windows 计时器更准确地按时引发事件。
所以请仔细研究每个定时器,并决定哪一个最适合您的情况。
你可以使用这个,只要确保你所做的任何操作都是线程安全的。
using System.Threading;
public void DoStuff(IPerson person)
{
new Timer(ProcessPerson, person, 0, 20000);
}
public void ProcessPerson(object threadState)
{
IPerson person = threadState as IPerson;
// do your stuff
}