2009-09-07 58 views
0

我希望每秒触发一些代码。通常,我会创建一个Timer并链接到它的事件。我想知道是否有更好的方法。也许没有要求实施IDisposable。如何轻量级注册周期性事件?

编辑:我最关心的是LoC。我不喜欢写一个完整的类时,沿着该线的东西可以工作,太:

System.RegisterPeriodicEvent (1000,() => { Syso("asdf"); }; 

在我的梦中这种情况下,一旦当前威胁终止是自动注销。

我感觉我应该只写一个实现上述方法的类。

+2

在哪种情况下?在一个Windows应用程序?在单个或多线程应用程序中?关于IDisposable有什么问题(和非轻量级的)? – 2009-09-07 11:12:08

+0

是的,Windows应用程序。多线程。 IDisposable没有错,只有很少的实际价值的LoC。 – mafu 2009-09-07 11:14:58

+0

我认为防止内存泄漏具有相当重要的价值。 – 2009-09-07 11:17:20

回答

1

如果没有损坏,请不要尝试修复它。

正在运行x每段代码y时间量是一个计时器所做的事情,它很好。

至于避免IDisposable,不是真的,不是没有创建内存泄漏无论如何。我能想到的唯一两种方法是使用内核原始计时器(需要发布,需要发布,IDisposable),或者使用线程和Thread.Sleep()或类似的(然后在完成时需要终止线程IDisposable)。

0

这不完全是一种轻量级的做事方式,但Retlang具有非常好的定时器功能。特别是,它会处理令人讨厌的线程问题(通过序列化调用),并允许您将事件驱动的工作与定时器交错。

最重要的是,您处理光纤并处置事件。然而,这并不是微不足道的:你必须围绕API设计你的代码(稍后你会认为它是值得的,但起初看起来像一个痛苦的脖子)。