我有允许用户输入数据的 UI,每次当用户输入数据时,我都会引发一个事件,说数据在这个位置发生了变化并将其放入队列中。我有一个后台线程,它使用waitany和waithandle监听事件. 每次数据更改时,我都会对队列中的所有项目强制执行操作。它工作正常。问题是当用户输入两个值时,会有两个更改事件。队列中有两个元素,但第一个事件首先获得并立即强制执行操作,当时队列中只有一个项目。下一个事件来了,它将处理队列中的下一个项目。99% 的时间进程处理队列中的一个事件,因为人工数据输入的速度很慢,事件处理的速度很快。只是想知道是否有办法,我可以在处理事件周围放置一些逻辑来等待然后处理?
等待句柄部分
switch(WaitHandle.WaitAny(myhandles))
{
case event.ProcessEvent:
ProcessEvents();
break;
...
}
在进程事件中
private void ProcessEvents()
{
while(eventQueue.Count > 0)
{
//dequeue event
//process the given event
}
}