Well, it is quite simple, and thus not so simple. The basic idea is, that you need a http client. You have one in .net:
http://msdn.microsoft.com/en-us/library/system.net.http.httpclient.aspx[
^]. But that's only part of it: you still need to care about possible authentication, cookies, ans possibly even some other things, that happen in the browser before you get your page. Actually it depend how dynamic your needs are. But one thing you still have to do, if you want a whole page: you have to parse the html code, and download also the linked resources, like images, css, javascript files, any maybe other media too. This later can be a little complicated, since the content you can get via a page is not always statically linked. You might get an somewhat empty page, because the actual content is generated via javascript and downloaded in the background with ajax. So you can get trouble - that browsers already handle.
You can get over part of these problems, with an already existing mirroring tool, like
WGet[
^], or
curl[
^] - both available also for windows. These can be simply called from an other application too. Google might give you several other mirroring tools, but none will save the dynamically generated page - more precisely I don't know of any.