C# UWP UI 调度程序优化(Windows IoT 核心)

C# UWP UI dispatcher optimization (Windows IoT Core)

在我的应用程序中(在 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)
    });

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

So the question is, is it the right approach to use just one dispatcher and add every related code in there, or should i use the dispatcher inside every called method / task for better optimization?

理想情况下,您只想 运行 在 dispatcher/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.
    // ....
}