В FxCop существует правило, которое находит классы, содержащие объекты Disposable, но не реализует должным образом IDisposable.

ользую класс System.Timers.Timer в одном из классов в моем приложении. Я знаю, что класс Timer имеет метод Dispose, унаследованный от родительского класса Component, который реализует интерфейс IDisposable. Экземпляры класса ниже создаются много раз в течение жизненного цикла моего приложения; у каждого из них есть экземпляр класса Timer, который непрерывно генерирует события Elapsed в течение жизненного цикла класса. Должен ли я реализовать интерфейс IDisposable в классе, который использует класс Timer для удаления объекта таймера? (Я видел код, который не делает этого вообще). Я боюсь, что некоторые неуправляемые ресурсы не будут освобождены, если я буду использовать приведенный ниже класс следующим образом:

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;
            }
        }
    }
}

Ответы на вопрос(0)

Ваш ответ на вопрос