1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
|
/// <summary>
/// Helper class to call a function delayed
/// </summary>
public class DelayedEventHandler
{
/// <summary>
/// Delay-Timer
/// </summary>
private Timer t_Delay = new Timer();
/// <summary>
/// Delegate that should be invoked after delay
/// </summary>
private EventHandler eventDelegate;
/// <summary>
/// Delegate that receive the outer event to start delay
/// </summary>
public EventHandler OnDelay;
/// <summary>
/// The sender which raised the outer event
/// </summary>
private object sender;
/// <summary>
/// The event args that comes from the outer event
/// </summary>
private EventArgs e;
/// <summary>
/// Inits the delayed eventhandler
/// </summary>
/// <param name="delay">the time to wait before event is raised in ms</param>
/// <param name="eventDelegate">the delegate that should be invoked after delay</param>
public DelayedEventHandler(int delay, EventHandler eventDelegate)
{
t_Delay.Interval = delay;
t_Delay.Tick += new EventHandler(t_Delay_Tick);
this.eventDelegate = eventDelegate;
//bind delegate to register function, that start delay timer
this.OnDelay = new EventHandler(this.Register);
}
/// <summary>
/// The time to wait before event is raised in ms
/// </summary>
public int Delay
{
get { return this.t_Delay.Interval; }
set { this.t_Delay.Interval = value; }
}
private bool stopAndRestart = true;
/// <summary>
/// Controls the delay behaviour
/// </summary>
public bool StopAndRestart
{
get { return stopAndRestart; }
set { stopAndRestart = value; }
}
/// <summary>
/// method invoked after delay
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void t_Delay_Tick(object sender, EventArgs e)
{
//stop timer
this.t_Delay.Stop();
//invoke outer function by delegate with right sender and eventargs
if (this.eventDelegate != null)
this.eventDelegate(this.sender, this.e);
}
/// <summary>
/// invoked when outer event is raised
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void Register(object sender, EventArgs e)
{
this.sender = sender;
this.e = e;
if (this.StopAndRestart)
{
//stop and restart timer
this.t_Delay.Stop();
}
this.t_Delay.Start();
}
|