It may be because I am relatively new to all this, but I struggle to see what all the fuss is about.
As I see it, .NET 2.0 programmers have three choices:
(1) Use Application.DoEvents()
(2) Use a threading model of your choice
(3) Use the BackgroundWorker class
Surely they all have the same issue: Your application needs to be written carefully, and, in particular, you need to disable certain user controls before you start a long-running process, so that the application doesn't get its knickers in a twist.
All three methods require care - and I can't see that one is massively better than any other.
I agree with Daniel - it's just a matter of knowing how your application works. Any strong preference for one method over the other seems to me to be rather evangelical rather than practical.
I will be using the BackgroundWorker class in my next application. I will be using it purely because I want to gain experience with the various practices in .NET. I have a feeling that using Application.DoEvents() would be much simpler, and make no difference whatsover to the efficiency, maintainability and user-experience of the application.
Perhaps the advantages or disadvantages of each approach becomes more apparent in long, sprawling programs?