我在获取Silverlight Button Click事件时遇到问题,以立即更新控件的UI元素,然后继续执行其他一些过程。例如,更新控件的文本,然后执行一些操作。我试过调用UpdateLayout()方法,但这没有帮助。
以下是一些示例代码:
private void button1_Click(object sender, RoutedEventArgs e)
{
textBlock1.Text = "Testing";
textBlock1.UpdateLayout();
UpdateLayout();
Thread.Sleep(2000);
textBlock1.Text = "Done";
}
在该示例中,textBlock1控件将永远不会显示文本“Testing”。
答案 0 :(得分:2)
这是因为您使用Sleep
语句阻止了UI线程,这意味着文本块在完成之后才会更新,但到那时您已将文本设置为“完成”。
答案 1 :(得分:1)
这不起作用。当您不退出方法时,UI将阻止。这就是为什么在Silverlight中你通常会异步执行所有操作:
private void button1_Click(object sender, RoutedEventArgs e)
{
textBlock1.Text = "Testing";
var myTask = /* ... */
myTask.Completed += new FancyDelegate(myTask_Completed);
}
private void myTask_Completed(object sender, RoutetEventArgs e)
{
textBlock1.Text = "Done.";
}
如果您的任务没有异步功能,请将它们包装起来。但请注意,当您想要从另一个线程更改textBlock1.Text属性时,必须使用Dispatcher调用它。