Причина, по которой вы не обновляете текстовый блок, заключается в том, что вы блокируете диспетчер.
Пусть цикл возникнет в новом потоке и попросит диспетчера обновить текстовый блок.
private delegate void UpdateTextBox();
private void BtnClickHandler(object sender, RoutedEventArgs e)
{
string text;
UpdateTextBox updateTextBox = () => textBlock1.Text = text;
Action a = (() =>
{
for (int i = 0; i < 3; i++)
{
System.Threading.Thread.Sleep(500); // wait for 5 second
text = list[i].ToString();
textBlock1.Dispatcher.Invoke(updateTextBox); // assign a new text to the textblock
System.Console.WriteLine(list[i].ToString());
}
});
a.BeginInvoke(null, null);
}