0

我构建silverlight应用程序,因为我在加载内容之前显示进度条,我需要通过进度条几秒钟,然后我需要关闭..

我正在使用 system.threading.thread.sleep(1000) 但它使 UI 冻结。

我需要silverlight中的替代方案,它不应该冻结UI并且进程应该等待一段时间......

4

1 回答 1

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
    });
});
于 2013-07-19T02:55:32.567 回答