Вы не можете делать это так, как хотели бы, потому что все веб-запросы в WP7 (silverlight) являются асинхронными.
Это означает, что код не останавливается при загрузке веб-страницы и продолжается, когда он заканчивается в той же строке и функции, вместо этого он создает новый поток, загружает файл и вызывает функцию обратного вызова.
Вы должны были бы продолжить в функции обратного вызова (DownloadStringCallback2 в вашем случае).
В этой функции вы должны поместить исходный код (e.Result) в текстовое поле.
Могу ли я добавить к этому, если вы когда-либо получите исключение Cross-Thread или если вы хотите, чтобы пользовательский интерфейс был приемлемо применим при выполнении задач, вы можете использовать эту команду:
Dispatcher.BeginInvoke(new Action (() => LoadContent("http://www.google.com")));
Эта команда исправляет исключение Cross-Thread (если я правильно помню) и выполняет код в потоке, отличном от потока UI, таким образом поддерживая стабильный интерфейс.
РЕДАКТИРОВАТЬ Я думаю, ваш код должен выглядеть следующим образом:
private void button1_Click(object sender, RoutedEventArgs e)
{
string url = textBox1.Text;
LoadSiteContent(url);
}
public string LoadSiteContent(string url)
{
//create a new WebClient object
WebClient client = new WebClient();
client.DownloadStringCompleted += new DownloadStringCompletedEventHandler(DownloadStringCallback2);
client.DownloadStringAsync(new Uri(url));
}
private static void DownloadStringCallback2(Object sender, DownloadStringCompletedEventArgs e)
{
// If the request was not canceled and did not throw
// an exception, display the resource.
if (!e.Cancelled && e.Error == null)
{
textBlock1.Text = (string)e.Result;
//If you get the cross-thread exception then use the following line instead of the above
//Dispatcher.BeginInvoke(new Action (() => textBlock1.Text = (string)e.Result));
}
}