Once upon a long time ago I wrote a blog on cross threading, you know, trying to handle an event in one thread that was generated in another thread. Particularly dangerous on forms, since they are highly mutable. In that post, I was writing a library and I wanted to make sure I invoked the event on the thread of the event handler so that the user of my .DLL didn't have to even know things were happening on a different thread. More recently (yesterday in fact) I was communicating with a serial device on a separate thread and I wanted to show any error messages in the GUI. The threading was already done and the BackgroundWorker class wasn't used.
A New Idiom for Event Handlers
It occurred to me that I could write an event handler that could easily handle events from the same thread or from a different thread. In fact, I think all event handlers should be written this way and then you never need to worry about breaking the handler if you move a task into a separate thread.
So instead of doing something like this:
You can put your actual update code in a separate method, then write one delegate for all your event handlers and rewrite all the event handlers to use that delegate to invoke your newly separated method like this: