Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/facebook/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Silverlight按钮单击_Silverlight - Fatal编程技术网

Silverlight按钮单击

Silverlight按钮单击,silverlight,Silverlight,我在获取Silverlight按钮单击事件以立即更新控件的UI元素,然后继续执行其他过程时遇到问题。例如,更新控件的文本,然后执行一些处理。我尝试调用UpdateLayout()方法,但没有帮助 以下是一些示例代码: private void button1_Click(object sender, RoutedEventArgs e) { textBlock1.Text = "Testing"; textBlock1.UpdateLayout();

我在获取Silverlight按钮单击事件以立即更新控件的UI元素,然后继续执行其他过程时遇到问题。例如,更新控件的文本,然后执行一些处理。我尝试调用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对象很容易实现这一点。