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