アプリケーションのクラスの 1 つで System.Timers.Timer クラスを使用しています。Timer クラスには、IDisposable インターフェイスを実装する親 Component クラスから継承された Dispose メソッドがあることを知っています。以下のクラスのインスタンスは、アプリケーションのライフサイクル中に何度も作成されます。それらのそれぞれには、クラスのライフサイクル中に継続的に Elapsed イベントを生成する Timer クラスのインスタンスがあります。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;
}
}
}
}