如何从 Silverlight 回调执行多个 UI 更新?
例如,我希望用户单击一个按钮,让 UI 进行更改,做一些工作,然后进行另一个更改...相反,用户单击按钮,回调似乎在后台执行,然后所有用户界面的变化在我眼前闪现。
主页.xaml:
<Grid x:Name="LayoutRoot" Background="White" >
<TextBlock Height="23" Name="textBlock1" Text="TextBlock" VerticalAlignment="Top"/>
<Button Click="button1_Click" Content="Button" Height="23" Name="button1" Width="75" />
</Grid>
MainPage.xaml.cs:
private void button1_Click(object sender, RoutedEventArgs e)
{
textBlock1.Text = "1";
// also tried Thread.Sleep(5000);
Dispatcher.BeginInvoke(() => Thread.Sleep(5000));
textBlock1.Text = "2";
}
The 开始调用异步运行,因此将返回并更改文本。
直接来自 MSDN 文档:“BeginInvoke 是异步的;因此,控制权在调用后立即返回到调用对象。”
相反,在 BeginInvoke 中添加您想要执行的处理。因此,您执行 Thread.Sleep,然后添加更改文本框。
后台工作者也可以与事件联系起来。因此,当 UI 更新(又称为 BackGroundWorker 完成事件)时,您可以启动下一个项目。这就是为什么你应该使用后台工作者
i.e.
BackgroundWorker w = new BackgroundWorker();
w.DoWork += (sender, args) =>
{
Thread.Sleep(5000);
Dispatcher.BeginInvoke(() => {
//your code here
});
};
w.RunWorkerAsync();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)