我在我的应用程序的一个类中使用System.Timers.Timer类.我知道Timer类具有继承自实现IDisposable接口的父Component类的Dispose方法.在我的应用程序生命周期中,下面创建的类实例多次; 他们每个人都有一个Timer类的实例,它在类的生命周期中连续生成Elapsed事件.我应该在使用Timer类来配置计时器对象的类中实现IDisposable接口吗?(我见过的代码完全没有这样做).如果我使用下面的类,我担心一些非托管资源将不会被释放:
SomeClass someClass = new SomeClass(); someClass.DoSomething(); someClass = null;
班级:
using System.Timers; public class SomeClass { private Timer m_timer; public SomeClass() { m_timer = new Timer(); m_timer.Interval = 1000; m_timer.Elapsed += new ElapsedEventHandler(m_timer_Elapsed); m_timer.AutoReset = false; m_timer.Start(); } public void DoSomething() { } private void m_timer_Elapsed(object sender, ElapsedEventArgs e) { try { //Do some task } catch (Exception ex) { //Ignore } finally { if (m_timer != null) { //Restart the timer m_timer.Enabled = true; } } } }
flesh.. 31
一般来说,您应该始终处置一次性资源.在你上面概述的情况下,我当然会期待.如果在实现计时器的类上实现IDisposable,则可以在using语句中使用该类,这意味着在处理类时将显式释放资源.
一般来说,您应该始终处置一次性资源.在你上面概述的情况下,我当然会期待.如果在实现计时器的类上实现IDisposable,则可以在using语句中使用该类,这意味着在处理类时将显式释放资源.
我看到你在一年前问过这个问题,但让我投入2美分.因通货膨胀而略少:).最近我在申请中发现我们没有处理定时器.我们有一个对象集合,每个对象都有一个计时器.当我们从集合中删除项目时,我们认为它应该被垃圾收集.出于某些原因,定时器不是这样.我们不得不在集合中的对象上调用dispose,以便在对象实际上被垃圾收集之前去掉计时器.
我使用的经验法则是制作任何具有IDisposable对象的东西,IDisposable本身(并且只有在显式调用Dispose时才处理子对象)
在Joe Duffy的博客上对IDisposable进行了很好的讨论以及代码示例,这些示例与我的优秀框架设计指南一书中的代码示例非常相似