Silverlight按钮单击

时间:2011-04-29 12:21:03

标签: silverlight

我在获取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”。

2 个答案:

答案 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调用它。