import typing
from System import EventArgs, DateTime, MulticastDelegate, IAsyncResult, AsyncCallback
from System.Reflection import MethodInfo
from System.ComponentModel import Component, ISupportInitialize, IContainer, ISite, ISynchronizeInvoke, DescriptionAttribute

class ElapsedEventArgs(EventArgs):
    @property
    def SignalTime(self) -> DateTime: ...


class ElapsedEventHandler(MulticastDelegate):
    def __init__(self, object: typing.Any, method: int) -> None: ...
    @property
    def Method(self) -> MethodInfo: ...
    @property
    def Target(self) -> typing.Any: ...
    def BeginInvoke(self, sender: typing.Any, e: ElapsedEventArgs, callback: AsyncCallback, object: typing.Any) -> IAsyncResult: ...
    def EndInvoke(self, result: IAsyncResult) -> None: ...
    def Invoke(self, sender: typing.Any, e: ElapsedEventArgs) -> None: ...


class Timer(Component, ISupportInitialize):
    @typing.overload
    def __init__(self) -> None: ...
    @typing.overload
    def __init__(self, interval: float) -> None: ...
    @property
    def AutoReset(self) -> bool: ...
    @AutoReset.setter
    def AutoReset(self, value: bool) -> bool: ...
    @property
    def Container(self) -> IContainer: ...
    @property
    def Enabled(self) -> bool: ...
    @Enabled.setter
    def Enabled(self, value: bool) -> bool: ...
    @property
    def Interval(self) -> float: ...
    @Interval.setter
    def Interval(self, value: float) -> float: ...
    @property
    def Site(self) -> ISite: ...
    @Site.setter
    def Site(self, value: ISite) -> ISite: ...
    @property
    def SynchronizingObject(self) -> ISynchronizeInvoke: ...
    @SynchronizingObject.setter
    def SynchronizingObject(self, value: ISynchronizeInvoke) -> ISynchronizeInvoke: ...
    def BeginInit(self) -> None: ...
    def Close(self) -> None: ...
    def EndInit(self) -> None: ...
    def Start(self) -> None: ...
    def Stop(self) -> None: ...


class TimersDescriptionAttribute(DescriptionAttribute):
    def __init__(self, description: str) -> None: ...
    @property
    def Description(self) -> str: ...
    @property
    def TypeId(self) -> typing.Any: ...

