A: 

On a first glance, I would recomend not trying to validate every time the text is changed. That can, and does, get a bit overwhelming. I fear that is what is going on here. Good job on making it Async as that will keep it from blocking but I also suspect it is hiding your issue.

Try having the TextChanged event set a flag to execute the validator and then just have the DoWork method run in a tight(ish) loop checking that flag. That will allow it time to complete and not get confused. It might take a second or two to get the correct data but shouldn't lock up.

Good luck.

Craig
Additionally you could get blocked if you do this. It says in their docs http://validator.w3.org/docs/api.html that excessive use will get blocked.
bendewey
I've built in a 1-second-or-greater delay between each validation per their suggestion.
Zack Peterson