hey crazy, didn't see this reply before i responded to your PM. clears up a few of my questions.
threading and locks in .NET are very easy to implement, they can be a bit harder to get right in some instances though. one of the nifty new features of framework 4 is that many of the collection classes now implement a thread safe means of adding and removing items from the collection without having to explicitly take out a lock.
for simple increment, decrement, and value swaps of primitives types there is the Threading.Interlocked class. it is far more efficient than using using the SyncLock statement (lock in c#).
the SyncLock() statement is another technique you can use to lock code blocks during multi thread operations. use it with care though, and only lock what and when you need to. being judicious in its use can help mitigate the risk of race and deadlock conditions.
you also can use Mutex as well to synchronize threaded operations. although this i haven't had very much experience with at this point, so i can't directly speak to it.
back to the topic of http protocol, i highly advocate making friends with the sockets namespace. taking a little time to build yourself a nice http class based on that will pay dividends well in to the future. i've had more than my share of strange issues and behaviors in programs relying on HTTPWebRequest, and in some cases even requiring some down right silly hacks to get it to operate correctly. again, it is far and away better than the web browser control for a plethora of reasons but in reality it will only get you so far.
there is of course always the option of going with a 3rd party http class like chillkat or something similar. but i am a "roll your own" type of guy, and with the exception of the classes and functions that my friend makes, i steer well clear of them whenever i can.
side note, my friend made an absolutely insane http class based on the sockets namespace that i have had the good fortune to be able to build many programs around. he has done several versions of it through the years and with each successive release improves upon it. it really speaks to what you can accomplish when you have a good handle on the sockets namespace and it is the primary reason i so heavily advocate for learning to use it. i have used its power, and it is pretty damn kickass. especially when compared to the other available options.
