I learnt something new today that I hadn't seen before in .NET 2.0. I got it from this link here and it is somewhat related to something I posted a long time ago about capturing ExecutionContext back here Essentially, it was this class called AsyncOperationManager which, as far as I can see, helps when you're trying to write a component which might call back (or fire events) into a consumer and that consumer might have a particular context that they're bound to (e.g. the consumer might be a windows forms control which has thread affinity and needs to be called on the thread that it was created on). To play around with this I wrote this little class (note: it's not meant to be bullet proof! it's just an example) that asynchronously reads a file from the disk and notifies a consumer as progress is made in reading that file. public class AsyncFileReadProgressEventArgs : EventArgs { public AsyncFileReadProgressEventArgs( int percentageRead) { this .percentageRead = percentageRead; } private int percentageRead; public...