How should I manage the cleaning of timers within a function?

In the following code, a is Timerdeclared inside the function, where it also subscribes to the event Elapsed:

    void StartTimer()
    {
        System.Timers.Timer timer = new System.Timers.Timer(1000);
        timer.Elapsed += new System.Timers.ElapsedEventHandler(timer_Elapsed);
        timer.AutoReset = false;
        timer.Start();
    }

As soon as the function completes, the reference to Timerwill be lost (I suppose).

Whether the event is executed Elapsedautomatically in an unregistered manner as the object is destroyed, or if not, can the event be unregistered in the most expired event:

    void timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
    {
        var timer = (System.Timers.Timer)sender;
        timer.Elapsed -= timer_Elapsed;
    }

Will this approach still allow proper cleaning of the object, or will timers never be declared in the local scope of the function for this reason?

+4
source share
2

, , CLR. , System.Timers.Timer , . , StartTimer() , .

AutoReset = false CLR , . - Elapsed.

, , CLR, Timer. , GC .

. , , . , Timer . , , , , , Elapsed. , , . , . Timer.

, IDisposable, . , , Elapsed , ObjectDisposedExceptions. , Timer . , , Elapsed Dispose(). . , , .

, , Elapsed . , , , , .NET- . -, , , , .

+11

:

void timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
    var timer = (System.Timers.Timer)sender;
    timer.Dispose(); //here
}

, , , .

Btw, , , :

await Task.Delay(1000);
+2

All Articles