WPF:在另一个线程上处理touchmove事件

时间:2014-09-15 09:09:49

标签: c# wpf multithreading event-handling

我正在编写一个包含1000张图像的复杂用户界面,其中约300张图像在用户触摸后移动(最接近触摸的图像)。为此,我必须在每次调用处理程序时计算每个图像的图像和触摸点之间的距离。不幸的是,当有多个用户(我们计划在支持大触摸的电视上使用它)时,应用程序往往会滞后。所以我的想法是为每次触摸创建一个新线程,并在新线程内部使用Application.Current.Dispatcher来更新UI:

Application.Current.Dispatcher.Invoke(new Action(() =>
{
    //Update the UI
}));

这可能和/或有更好的方法吗?

此外:我如何在另一个线程中处理TouchMove事件?

谢谢。

2 个答案:

答案 0 :(得分:3)

Application.Current.Dispatcher.Invoke(some action)

不会调用单独的线程,它会在当前线程上异步执行指定的Action,这是您案例中的UI线程。

查看BackgroundWorker。这将调用一个单独的线程,可用于进行密集计算,并具有RunWorkerCompleted回调以在计算完成后更新UI。

答案 1 :(得分:1)

Bit的回答很棒,作为后续行动,这里有一些可能的想法(除了缓存)以加快这个过程:

似乎令人惊讶的是它是距离的计算,而不是移动图像,导致滞后?我想这可能是后者 - 在这种情况下,可能值得看看你的算法的优化......

例如,触摸其他图像越远,我想象的移动越少?然后你可以更频繁地跳过这个动作以获得更远的图像:

例如,给每个图像一个lastUpdated DateTime,并且它与当前时间之间的差异< CONST / distance不会更新,比如说。

如果这仍然导致滞后,或者真正计算距离是问题,那么事件可能会被频繁触发,你应该检查TouchMove事件最近也没有做过计算。

只是一些想法:)

相关问题