1

当 UI 中发生繁重的任务时,是否可以显示忙碌指示符?在我们的应用程序中,大部分长时间运行的任务都是渲染控件,我们需要在渲染控件时显示一个指示器。

4

3 回答 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 回答