I just wanted to say how much I appreciate delegates in the .NET framework.
They're so easy to invoke, and I love the asynchronous capabilities. It's gotten me out of some binds. For example, I had a situation where I was trying to manipulate the SelectedItems property during the indexchanged event of a windows forms listbox. It kept throwing an exception from the bowels of Microsoft's code ... there was nothing I could do about it. After futzing around with it for a long while, I decided to put it in an asynchronous delegate call ... beautiful, it worked.
using System.Threading;
...
ThreadStart ts = new ThreadStart(LoadCompanyInfo);
ts.BeginInvoke(null,null);
And you can even use it in a web application when you want to do something that doesn't really involve the user (such as tracking stats in a database). Just BeginInvoke the delegate and let the user continue on his way.