Do not dispose the underlying Timer every time the Enabled is set to false, keep it around for as long as this Timer exists. Throw ObjectDisposedException on Enabled setter. ArgumentException throwing according to docs. Removed 'disposed' field. DueTime for underlying timer changes only if enabled (as per docs). Check for already disposed in Dispose(). Not firing Elapsed if disposed. Unit tests.
Merge pull request #1213 from fengari/system_timers_timer_opt

System.Timers.Timer optimization and small correction