Silverlight按钮单击
我在获取Silverlight按钮单击事件以立即更新控件的UI元素,然后继续执行其他过程时遇到问题。例如,更新控件的文本,然后执行一些处理。我尝试调用UpdateLayout()方法,但没有帮助 以下是一些示例代码:Silverlight按钮单击,silverlight,Silverlight,我在获取Silverlight按钮单击事件以立即更新控件的UI元素,然后继续执行其他过程时遇到问题。例如,更新控件的文本,然后执行一些处理。我尝试调用UpdateLayout()方法,但没有帮助 以下是一些示例代码: private void button1_Click(object sender, RoutedEventArgs e) { textBlock1.Text = "Testing"; textBlock1.UpdateLayout();
private void button1_Click(object sender, RoutedEventArgs e)
{
textBlock1.Text = "Testing";
textBlock1.UpdateLayout();
UpdateLayout();
Thread.Sleep(2000);
textBlock1.Text = "Done";
}
在该示例中,textBlock1控件永远不会显示文本“Testing”。这是因为您已使用
Sleep
语句阻止了UI线程,这意味着文本块在完成后才会更新,但此时您已将文本设置为“Done”。这不起作用。当您不退出该方法时,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调用它。接下来,使用下面的建议,我发现BackgroundWorker对象很容易实现这一点。