3 public enum EventContext
{
8 public interface IVxEvent
{
11 EventContext Context
{
16 public interface IFutureVxEvent
: IVxEvent
, IComparable
{
22 public delegate void EmptyCallback();
23 public delegate void SingleArgCallback(object arg
);
25 public class VxEvent
: IVxEvent
{
26 private readonly EmptyCallback cb
;
28 public VxEvent(EmptyCallback cb
)
38 public EventContext Context
{
39 get { return EventContext.MainThread; }
43 public class ArgVxEvent
: IVxEvent
{
44 private readonly SingleArgCallback cb
;
45 private readonly object arg
;
47 public ArgVxEvent(SingleArgCallback cb
, object arg
)
58 public EventContext Context
{
59 get { return EventContext.MainThread; }
63 public class FutureVxEvent
: VxEvent
, IFutureVxEvent
{
64 private readonly DateTime when
;
66 public FutureVxEvent(EmptyCallback cb
, DateTime when
) : base(cb
)
71 public FutureVxEvent(EmptyCallback cb
, TimeSpan delta
) : base(cb
)
73 this.when
= DateTime
.Now
+ delta
;
76 public DateTime When
{
80 public int CompareTo(object other
)
82 if (!(other
is IFutureVxEvent
)) {
83 throw new ArgumentException("Other is not an IFutureVxEvent");
86 IFutureVxEvent o
= (IFutureVxEvent
)other
;
87 return when
.CompareTo(o
.When
);
91 public class ArgFutureVxEvent
: ArgVxEvent
, IFutureVxEvent
{
92 private readonly DateTime when
;
94 public ArgFutureVxEvent(SingleArgCallback cb
, object arg
, DateTime when
)
100 public ArgFutureVxEvent(SingleArgCallback cb
, object arg
, TimeSpan delta
)
103 this.when
= DateTime
.Now
+ delta
;
106 public DateTime When
{
110 public int CompareTo(object other
)
112 if (!(other
is IFutureVxEvent
)) {
113 throw new ArgumentException("Other is not an IFutureVxEvent");
116 IFutureVxEvent o
= (IFutureVxEvent
)other
;
117 return when
.CompareTo(o
.When
);