当前位置:  开发笔记 > 编程语言 > 正文

如果在应用程序中使用System.Timers.Timer,是否有必要处置它?

如何解决《如果在应用程序中使用System.Timers.Timer,是否有必要处置它?》经验,为你挑选了3个好方法。

我在我的应用程序的一个类中使用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语句中使用该类,这意味着在处理类时将显式释放资源.



1> flesh..:

一般来说,您应该始终处置一次性资源.在你上面概述的情况下,我当然会期待.如果在实现计时器的类上实现IDisposable,则可以在using语句中使用该类,这意味着在处理类时将显式释放资源.



2> uriDium..:

我看到你在一年前问过这个问题,但让我投入2美分.因通货膨胀而略少:).最近我在申请中发现我们没有处理定时器.我们有一个对象集合,每个对象都有一个计时器.当我们从集合中删除项目时,我们认为它应该被垃圾收集.出于某些原因,定时器不是这样.我们不得不在集合中的对象上调用dispose,以便在对象实际上被垃圾收集之前去掉计时器.


计时器由它创建的Win32计时器保持活动状态.计时器上的事件可使您的对象保持活动状态.

3> Rowland Shaw..:

我使用的经验法则是制作任何具有IDisposable对象的东西,IDisposable本身(并且只有在显式调用Dispose时才处理子对象)

在Joe Duffy的博客上对IDisposable进行了很好的讨论以及代码示例,这些示例与我的优秀框架设计指南一书中的代码示例非常相似

推荐阅读
我我檬檬我我186
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有