【发布时间】:2019-01-25 17:54:07
【问题描述】:
我需要一个事件处理程序来拖动我的 UWP 项目中执行等待操作的元素。
因此我需要将我的事件处理程序标记为异步:
myElement.PointerMoved += OnPointerMoved;
public async void OnPointerMoved(object sender, PointerRoutedEventArgs e)
{
await MyOperationAsync();
}
结果,我发现UWP框架调用了OnPointerMoved,即使之前的执行没有完成(这是可以预见的,因为你不能等待一个async void方法......)。
我正在寻找一种解决方案,以确保我的事件处理程序中的代码被顺序调用(即 OnPointerMoved 的下一次执行应该在上一次实际完成之后发生)。
有没有人为此提供优雅的解决方案?
【问题讨论】:
-
不,你可以
await和async void,只是调用你的处理程序的框架不能。 -
没有看到
MyOperationAsync究竟做了什么,很难说。也许您应该将所有操作排队并让您自己的线程/空闲计时器处理它们? -
@MickyD 我无法使用另一个线程,因为我需要访问 UiElements
-
然后使用空闲调度计时器
标签: c# uwp async-await event-handling thread-synchronization