Como System.Timers.Timer y System.Windows.Forms.Timer ambos usan ThreadPool, no tiene un identificador para el temporizador del sistema operativo, por lo que no hay un recurso de temporizador nativo que se haya eliminado, solo un hilo completo . No estoy seguro de que puedas capturar un hilo reciclado por ThreadPool, pero podría estar equivocado.
Se podría tal vez hágalo usted mismo (no he probado esto, y tomando un ManualResetEvent en Desechar podría ser más útil):
void Run()
{
ManualResetEvent resetEvent = new ManualResetEvent(false);
System.Threading.Timer timer = new System.Threading.Timer(delegate { Console.WriteLine("Tick"); });
timer.Dispose(resetEvent);
MyTimer t = new MyTimer();
t.Interval = 1000;
t.Elapsed += delegate { t.Dispose(resetEvent); };
resetEvent.WaitOne();
}
public class MyTimer : System.Timers.Timer
{
protected override void Dispose(bool disposing)
{
base.Dispose(disposing);
}
public virtual void Dispose(WaitHandle handle)
{
handle.SafeWaitHandle.Close();
Dispose();
}
}
Creo que el evento System.Timers.Timer Disposed se dispara tan pronto como ha llamado al método System.Threading.Timer Dispose. –
@Ian El evento se llama dentro de 'Component.Dispose (disposing)' para proporcionarle la señal de WaitHandle antes de llamar a base.Dispose(), y usar el Custom Dispose (WaitHandle) que debería activarse después. –