|
|
1
2
提供时间延迟的空循环表示对事件驱动模型的理解不足。 Windows CE与桌面版本的Windows具有足够不同的事件处理程序,虽然Windows可以容忍这种滥用,但Windows CE不会。 如果您在这样的空循环中占用了大量的处理时间,而不是调用一个延迟例程,该例程将控制权正确地释放回调度程序,那么就不会调用事件处理程序。如果事件处理程序的调用频率不够高,那么您将丢失事件。有各种各样的缓冲区来存储其中的一些事件,但是根据输入设备(键盘、触摸屏等),这些缓冲区可能不充分或不存在。 更糟糕的是,便携式设备上的事件处理程序没有大的缓冲区。台式计算机有大量的缓冲区用于键盘和鼠标操作。 还有许多其他的区别,但底线是您确实需要正确地释放线程并适当地延迟,而不是这些简单的空循环延迟。 WindowsCE计时器在这里会更合适-用keydown程序启动计时器,当它触发时,执行所需的操作。这会将控件释放回UI,以便其他事件可以运行。 另外,请记住,虽然WindowsCE是多线程/多任务的,但最好将您的程序视为一次只运行一件事情。操作系统和事件模型可能正在发送您的应用程序事件(而不是缓冲它们),而您的应用程序正处于这个延迟例程中,忽略它们。当循环执行时,您将看不到其他事件(包括关键字)。根据系统的负载和性能,延迟可能会运行几毫秒到数百毫秒-您不能指望它每次运行相同的时间长度-使用实时计时器的另一个原因。 -亚当 |
|
|
2
1
一旦消息进入队列,WindowsCE就不会“删除”任何键。我猜你用的量子太多了,以至于键盘驱动程序本身无法获得所有的键,因此无法传递它们。你可以打电话确认 PostKeybdMessage 而不是使用键盘本身排除硬件或驱动程序交互。 |
|
|
3
1
问题是与BSP中的一个错误有关(显然是来自一些飞思卡尔代码),这意味着键盘驱动程序在比预期的低得多的优先级中断下工作。 现在已经修好了,一切都很好。:) |
|
|
A B · C#Excel自动调整列避免长文本时出错 1 年前 |
|
|
Megrez7 · C#ToArray转换合并为一行,导致数组元素更改 1 年前 |
|
Aycon · 在工厂方法中释放部分创建的对象的正确方法是什么? 1 年前 |
|
|
Sei · Avalonia/WPF将路由器传递到控制模板 1 年前 |