Hi Rob ----
Jim Booth's suggestion leads you the right way on this. For a while, I've been working on the design of a Process Object pattern that was a middle-tier object responsible for launching and monitoring tasks. It would instance a message broker object and then send the broker status messages on the task. The broker would have a UI in some designs or the UI would be designed to work with the broker.
The big issue when you boil it down is designing your framework or architecture to respect a messaging standard and encapsulate that standard into specific objects (brokers, mediators, messengers, et al.) and ensure a set of properties/methods in all other objects that respect the messaging standard. This allows you to focus on what the other objects are supposed to be doing.
I hope this is not too confusing.
------------------------------------------------
John Koziol, ex-MVP, ex-MS, ex-FoxTeam. Just call me "X"
"When the going gets weird, the weird turn pro" - Hunter Thompson (Gonzo) RIP 2/19/05