if you are doing this to test to see if document has truely loaded, there is a better way to test for this particular event (ie: pDisp objects). Look at some of my webbrowser-control related answers.
so here, you want to run a difference counter between NavComplete and DocComplete, however, if you do it normally, it won't work, as NavComplete gets called more than once on many frames, so you need to check to see if the NavComplete being called is a unique one. In vb its just comparing one object to another using the Is operator, in C# i understand Is isn't available, so you just do a normal object comparison.
So, you keep a list of every pDisp objects that NavComplete has posted, and before adding each one, you check the entire collection to make sure the pDisp being added hasn't been added before (ie: is unique), eg: If pDisp Is pDispCollection(i) Then
and "i" being your increment counter in your for each loop.
Now, the pDisp's that DocComplete posts are ALWAYS unique (so you dont have to worry about it getting called more than once for each new/unique pDisp), so every time a pDisp occurs, you just find which one it is from the collection, and remove it.
Once you are at 0, you know it has truely finished :).
There are other things you need to test for but this is a big/main important one and will increase your accuracy big time (much more than just checking for .busy and .readystate).
Let me know how it goes or if you need more help.