Olá Rodrigo,
Isso acontece porque o método Response_Completed é executado em uma thread diferente da thread da interface gráfica e não é permitido acessar controles de uma thread diferente.
Para conseguir alterar os controles a partir daí, você teria de chamar o Dispatcher e passar uma função (ou lambda expression) para ser executada pelo Dispatcher, na thread correta. Isso não é uma característica das aplicações Metro, mas de qualquer aplicação
Windows, seja Windows Forms ou WPF...
No entanto, no .NET Framework 4.5 (incluido no Windows 8) as chamadas assíncronas são muito mais simples utilizando
async e await, e o WinRT fornece a classe
HttpClient, específica para efetuar requisições e preparada para utilizar o padrão assíncrono com Tasks (que são awaitable).
private async void ObterTweets_Click(...)
{
const string url = "https://api.twitter.com/..."
var client = new HttpClient();
var response = await client.GetAsync(new Uri(url));
var content = await response.Content.ReadAsStringAsync();
//...
tbPersonName.Text = "Test string";
}
Abraços,
Caio Proiete
Caio Proiete
Microsoft MVP, MCT, MCPD, MCTS, MCSD
http://caioproiete.net