我构建silverlight应用程序,因为我在加载内容之前显示进度条,我需要通过进度条几秒钟,然后我需要关闭..
我正在使用 system.threading.thread.sleep(1000) 但它使 UI 冻结。
我需要silverlight中的替代方案,它不应该冻结UI并且进程应该等待一段时间......
我构建silverlight应用程序,因为我在加载内容之前显示进度条,我需要通过进度条几秒钟,然后我需要关闭..
我正在使用 system.threading.thread.sleep(1000) 但它使 UI 冻结。
我需要silverlight中的替代方案,它不应该冻结UI并且进程应该等待一段时间......
默认情况下,一切都在 UI 线程上,因此任何耗时的任务都会阻塞 UI。为了防止这种情况,将执行推送到后台线程——一种方法是Task.Factory
:
Task.Factory.StartNew( () => {
Thread.Sleep(1000);
});
请注意,如果您想对 UI 做任何事情(我想您会这样做),那么您需要回到 UI 线程。(如果后台线程尝试更改 UI,运行时将抛出异常。)使用Dispatcher来做到这一点:
Task.Factory.StartNew( () => {
// sleep on a background thread
Thread.Sleep(1000);
// when complete, return to the UI thread to prevent access violation
Application.Current.Dispatcher.BeginInvoke( () => {
// do UI stuff here
});
});