让我们考虑以下只更新堆栈面板的方法:
private void Button_Click(object sender, RoutedEventArgs e)
{
var t = new TextBlock();
t.Text = "TEXT1";
var t2 = new TextBlock();
t2.Text = "TEXT2";
dummyStack.Children.Add(t);
// This can be any synchronous work
Thread.Sleep(5000);
dummyStack.Children.Add(t2);
}
当然,接口在约5秒后更新,这意味着该方法完成执行。我的问题是,有没有办法在第一个文本块首次修改堆栈面板时强制UI更新,然后在下一次UI更新等5秒后修改..?
答案 0 :(得分:0)
为什么不执行任务。延迟而不是睡觉。这将允许ui在代码等待时更新
private async void Button_Click(object sender,RoutedEventArgs e) { var t = new TextBlock(); t.Text =" TEXT1&#34 ;;
var t2 = new TextBlock();
t2.Text = "TEXT2";
dummyStack.Children.Add(t);
await Task.Delay(5000);
dummyStack.Children.Add(t2);
}
答案 1 :(得分:0)
您可以将代码分成两部分,立即(同步)运行第一部分,并在运行silverlight框架代码后设置第二部分运行(异步)并使用第一部分中的更改更新可见UI
private void Button_Click(object sender, RoutedEventArgs e)
{
//synchronous section
var t = new TextBlock();
t.Text = "TEXT1";
dummyStack.Children.Add(t);
Dispatcher.BeginInvoke(
//asynchronous section
()=>{
var t2 = new TextBlock();
t2.Text = "TEXT2";
// ... heavy calculations
dummyStack.Children.Add(t2);
}
);
}
答案 2 :(得分:0)
您可以使用Task.Delay,这会导致上下文切换到UI。这可能是你的解决方案。
true