/
StatusBase.cs
52 lines (43 loc) · 1.55 KB
/
StatusBase.cs
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
using System;
using System.Linq;
namespace SideSoftware.Log
{
public class StatusBase
{
public event EventHandler<StatusEventArgs> StatusBroadcast;
public void LogStatus(string message, LogTypeEnum logType = LogTypeEnum.Info, Exception exception = null)
{
OnStatusBroadcast(new LogStatus { Message = message, LogType = logType, Exception = exception });
}
public void LogStatus(LogStatus status)
{
OnStatusBroadcast(status);
}
private void OnStatusBroadcast(LogStatus status)
{
if (StatusBroadcast == null) return;
var eventListeners = StatusBroadcast.GetInvocationList();
// Raising Event
for (var index = 0; index < eventListeners.Count(); index++)
{
var methodToInvoke = (EventHandler<StatusEventArgs>)eventListeners[index];
methodToInvoke.BeginInvoke(this, new StatusEventArgs(status), EndAsyncEvent, null);
}
// Done Raising Event
}
private static void EndAsyncEvent(IAsyncResult iar)
{
var ar = (System.Runtime.Remoting.Messaging.AsyncResult)iar;
var invokedMethod = (EventHandler<StatusEventArgs>)ar.AsyncDelegate;
try
{
invokedMethod.EndInvoke(iar);
}
catch
{
// Handle any exceptions that were thrown by the invoked method
// An event listener went kaboom!
}
}
}
}