我构建了silverlight应用程序,因为我在加载内容之前显示进度条,我需要通过进度条几秒钟然后我需要关闭..
我正在使用system.threading.thread.sleep(1000),但它会让UI冻结。
我需要在silverlight中使用替代方案,其中不应该冻结UI并且进程应该等待一段时间......
答案 0 :(得分:1)
默认情况下,所有内容都在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
});
});