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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#UWP UI调度程序优化(Windows IoT核心)相关的知识,希望对你有一定的参考价值。

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

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

答案

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

理想情况下,您希望在调度程序/ 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.
    // ....
}

以上是关于C#UWP UI调度程序优化(Windows IoT核心)的主要内容,如果未能解决你的问题,请参考以下文章

Windows 10 UWP 应用程序在启动时崩溃(错误模块名称:Windows.UI.Xaml.dll)

在WPF应用程序中使用UWP UI

如何在带有 Windows.Storage 的 UWP 中使用 System.IO 序列化程序

UWP 应用程序第一次崩溃,而不是每次都在 0x06515AE7 (Windows.UI.Xaml.dll) 处引发异常

UWP App 在发布模式下崩溃(故障模块:Windows.UI.Xaml.dll)

如何将 C# UWP 应用程序的非 UI 部分转换为 JavaScript?