当 UI 中发生繁重的任务时,是否可以显示忙碌指示符?在我们的应用程序中,大部分长时间运行的任务都是渲染控件,我们需要在渲染控件时显示一个指示器。
问问题
796 次
3 回答
0
尝试使用 DispatcherTimer 在调用繁重任务之前设置繁忙指示器运行(通过使用延迟)。
然后,您可以在繁重的任务完成后禁用该指示器。
为我工作。
'enable busy indicator & set up the timer'
Private Sub renderControl(ByVal sender As Object, ByVal e As RoutedEventArgs)
_busyIndicator.IsBusy = True
Dim timer As New DispatcherTimer
timer.Interval = TimeSpan.FromMilliseconds(100)
AddHandler timer.Tick, AddressOf renderControl_TimerTick
timer.Start()
End Sub
'do your heavy task, disable busy indicator then stop the timer'
Private Sub renderControl_TimerTick(ByVal sender As Object, ByVal e As EventArgs)
DoStuff()
_busyIndicator.IsBusy = False
'Stop the timer'
TryCast(sender, DispatcherTimer).[Stop]()
End Sub
希望这可以帮助!
于 2013-11-29T14:25:00.543 回答
0
当 UI 线程忙时,您无法显示加载动画,但您可以显示静态通知,例如TextBlock
带有适当文本的控件。但是如果你在更新控件的文本后立即在 UI 线程上启动长时间运行的操作TextBlock
,那么控件的 UI 将不会得到更新,直到操作结束。要克服这个问题,您可以使用以下问题的答案中描述的技术:在冻结 Silverlight UI 线程之前显示文本指示器。
于 2013-04-26T11:00:35.913 回答
0
首先,考虑使用后台线程来完成长时间运行的工作。如果这是不可能的,即在 UI 线程上加载 UI 组件确实需要很长时间,那么您当然可以在加载部分的顶部放置一个繁忙指示器作为覆盖,然后在加载所有内容时隐藏覆盖。
顺便说一句,如果不将 UI 逻辑与 UI 分离,就很难编写响应式、多线程的应用程序。研究“MVVM”模式。使用 MVVM 将使您的应用程序实现跨越式发展。
我会说没有严肃的应用程序使用'代码隐藏',即一切都是通过DataContext、数据绑定、ViewModels 和命令完成的。
否则,请考虑使用 Tasks 或 BackgroundWorker 并了解 Dispatcher。
卢克
于 2013-04-26T11:09:35.387 回答