I have a static class that I would like to raise an event as part of a try catch block within a static method of that class.
For example in this method I would like to raise a custom event in the catch.
public static void saveMyMessage(String message) { try { //Do Database stuff } catch (Exception e) { //Raise custom event here } }
Thank you.
Important: be very careful about subscribing to a static event from instances. Static-to-static is fine, but a subscription from a static event to an instance handler is a great (read: very dangerous) way to keep that instance alive forever. GC will see the link, and will not collect the instance unless you unsubscribe (or use something like a WeakReference).
The pattern for creating static events is the same as instance events, just with
static:To make life easier (re null checking), a useful trick here is to add a trivial handler:
Then you can simply invoke it without the null-check:
Note that because delegate instances are immutable, and de-referencing is thread-safe, there is never a race condition here, and no need to lock… who-ever is subscribed when we de-reference gets invoked.
(adjust for your own event-args etc). This trick applies equally to instance events.