Quote Originally Posted by FourBlades
I'm sorry I meant the last part of my post:

Just as a learning point for me... When you mentioned using explicit delegation were you refering to simply invoking a delegate and calling BeginInvoke on the Delegate and passing (possibly) a parameter, the CallBack function, and a state object; and then retrieving the IAsyncResult AsyncState to determine which was control would receive an update (as per appropriate state info being passed in)?

Are you talking about using a class to maintain info on the calling object?
What I mean is this, create an object to hold info on which control should be accessed on the UI and then let that object ride round trip throught the Delegate and the CallBack?

Or just making different delegates for each situation?
If you only have one task to perform, like set the Text of the same Label over and over, then I'd use the ReportProgress method of a BackgroundWorker. If you have to perform the same task but on different controls at different times, then I'd create a single method and a single delegate to handle them all. If you have different tasks to perform on different controls at different times then I'd create a distinct method and delegate for each. There's no need for any IAsynchResults at all.