public override void AddTimeout(Timeout timeout) { new Timer((a) => { BlockInvoke(delegate() { timeout.Run(null); if (!timeout.ShouldContinueToRepeat()) ((Timer)a).Dispose(); }); }, null, timeout.begin, timeout.span); }