【问题标题】:C# UWP UI dispatcher optimization (Windows IoT Core)C# UWP UI 调度程序优化(Windows IoT Core)
【发布时间】:2019-04-14 07:15:39
【问题描述】:

在我的应用程序中(在 Dragonboard 410c 上)我有一个 ThreadPoolTimer。 Tick-Event 内部有很多工作要做,大部分工作是处理数据和更新 UI。所以我在 Tick-Event 中添加了一个调度程序并在那里处理所有工作。由于 Tick-Event 每秒调用一次(更新 UI 上的时钟需要这个),一些 UI 动画每秒有点滞后。一旦我删除了 UI 上更新时钟的选项,所有动画都运行流畅。

private async void clock_Tick(ThreadPoolTimer timer)
{
    await CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(CoreDispatcherPriority.Normal,
    () =>
    {
        textBlockClock.Text = DateTime.Now.ToString("HH:mm");
        textBlockWeekDay.Text = DateTime.Now.ToString("dddd", cultureInfo);
        textBlockDate.Text = DateTime.Now.ToString("dd.MM.yyyy");

        // Do more work (call multiple methods and tasks)
    });

所以问题是,只使用一个调度程序并在其中添加所有相关代码是正确的方法,还是应该在每个调用的方法/任务中使用调度程序以进行更好的优化?

【问题讨论】:

    标签: c# uwp dispatcher windowsiot windows-iot-core-10


    【解决方案1】:

    所以问题是,只使用一种方法是否正确? 调度程序并在其中添加所有相关代码,或者我应该使用 每个被调用的方法/任务中的调度程序以便更好地优化?

    理想情况下,您只想在调度程序/UI 线程上运行与 UI 相关的代码。它可能会增加复杂性,因此需要权衡取舍。通常,如果您将繁重的处理代码(不需要 UI 线程)从 UI 代码中分离出来,并将其放在 Dispatcher.RunAsync 方法之外,从而最大限度地减少 UI 线程中的工作以保持 UI 更具响应性,那么您会很好。

    private async void clock_Tick(ThreadPoolTimer timer)
    {
        // Do some work.
        // ...
        // Update the UI.
        await CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(CoreDispatcherPriority.Normal,
        () => {
            textBlockClock.Text = clock;
            textBlockWeekDay.Text  weekday;
            textBlockDate.Text = date;
        });
        // Do more work.
        // ....
    }
    

    【讨论】:

    • 因为我没有直接在clock_Tick事件中的所有代码(我在那里调用多个方法),我可以在每个方法中使用调度程序,对吗?奇怪的是,所有的 UI 动画都运行良好,直到设置这 3 行来更新 UI 上的时钟...
    • @andy 您可以在每个方法中使用调度程序。但是,它会增加代码的复杂性。建议使用适当的架构将逻辑与 UI 代码分离。 MVVM 模式是开发 XAML 应用程序的不错选择。
    • 好的,谢谢。我会以这种方式进行测试,并希望动画滞后会消失。当我在电脑上调试时,没有这样的问题,只有在 Dragonboard 上,但没有那么大的能力(即使它对于 UI 相关的思考比 RPi 快得多)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-31
    • 2020-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多