I think this solution is overly complicated. To count words, why not use a regular expression? They're very very fast and efficient.

This example is in VB6 but you can still use the same regular expression and the new .Net regex classes to simply count all of the matches. This way you can get your 20-30 lines of code down to about 2-3.