我有一个从第三方库引发的事件,它在后台线程上执行。此事件主要通知侦听器库正在监视的系统中的状态更新。如果 InvokeRequired 为 true,则处理程序在 UI 线程上调用自身,然后在任何一种情况下继续将状态更改条目附加到文本框中的文本,并在托盘中弹出通知。
现在,问题是这些状态更新可以非常迅速地到来。被监控的系统可以在几毫秒内从其“空闲”状态通过几个中间体进入“就绪”状态。我需要知道系统已经过渡到所有这些中间状态;但是,并非所有状态更改都进入日志。设置断点并单步执行处理程序会显示最奇怪的行为;处理程序将单步执行前几行代码,然后跳回方法的入口。就好像事件或 Windows 消息泵正在中止方法调用,因为对同一方法的另一个调用即将到来。将方法体放在锁块中并不能解决它。
我以前在其他不使用此第三方库的项目中看到过这种情况。我并不担心,因为快速事件只是触发窗口重绘。如果它们都发生了,那就太好了,但是如果其中一个短路了,那么管道中还有另一个会通过。然而,这是一项对应用程序更为关键的任务,必须在每次引发事件时按顺序执行(它不必像状态实际变化那样快;绝对不会发生这种情况)。
这种短路行为的原因是什么,我该如何阻止它?