c# - C# UWP UI 调度程序优化(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)
});
所以问题是,只使用一个调度程序并在其中添加所有相关代码是正确的方法,还是应该在每个调用的方法/任务中使用调度程序以进行更好的优化?
解决方案
所以问题是,只使用一个调度程序并在其中添加所有相关代码是正确的方法,还是应该在每个调用的方法/任务中使用调度程序以进行更好的优化?
理想情况下,您只想在调度程序/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.
// ....
}
推荐阅读
- vba - 对具有相同产品名称但不同值的行求和 Excel vba
- docker - hub.docker.com 构建的命名约定是什么
- python - 为什么取消 qfiledialog 有错误?
- google-apps-script - 使用 Google Apps 脚本将 Google 幻灯片演示文稿下载为 PowerPoint 文档?
- git - 以编程方式显示合并期间使用的所有 git rerere 分辨率
- oracle - DBMS_SCHEDULING 重复间隔 - 半小时,9-5,周一至周五
- python - Django 对过去 10 周内每周的值求和
- opencv - 使用内部和外部相机参数进行图像匹配
- flutter - How to change language of system clipboard text (Copy, Paste etc.,) to Chinese in Flutter?
- sql-server - 有没有办法回滚事务中的特定保存点?