Довольно тривиальная задача, с которой могут многие столкнуться. Но ее решение не очевидно. Мне это понадобилось, когда я разрабатывал AldoranSpy. Суть была в том, что необходимо было получить содержимое HTML-страницы с удаленного сервера. Пытаясь использовать компонент WebBrowser, у меня возникали трудности различного характера. К тому же было понятно, что WebBrowser – компонент визуальный (а ведь нам не требуется ничего отображать) и держать его невидимым было уж как-то совсем неправильно.

Довольно долго искал, как правильно было использовать WebBrowser, в то время как его использование совсем не требовалось. Ответ крылся в использовании класса WebClient.

using System.Net;

string strFileContent;
WebClient Client = new WebClient();
Stream strm = Client.OpenRead("http://www.aldoran.ru/?page=stat");
StreamReader sr = new StreamReader(strm);
strFileContent = sr.ReadToEnd();
strm.Close();

В итоге, в переменной strFileContent получаем содержимое HTML-страницы. Но это далеко не единственное применение WebClient. Также можно качать и картинки:

using System.Net;

Bitmap m_bmpFileContent;
WebClient Client = new WebClient();
Stream strm = Client.OpenRead("http://www.aldoran.ru/userbars/" + m_strUserName + ".png");
bmpFileContent = new Bitmap(strm);
strm.Close();

Вполне естественно, что картинки – тоже не последнее, что может делать WebClient. К примеру, с помощью него можно загружать файла на удаленный ресурс. Более подробно вы все это можете прочитать на странице MSDN.