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)
如何在带有 Windows.Storage 的 UWP 中使用 System.IO 序列化程序
UWP 应用程序第一次崩溃,而不是每次都在 0x06515AE7 (Windows.UI.Xaml.dll) 处引发异常