Visio 拖动事件乱序
Visio Drag Events Out of Order
在 Visio 中工作时,我看到了一个奇怪的行为。将模板中的第一个形状拖放到页面上时,我们会进行一些处理,大约需要 10 秒。在某些机器上(通常是较慢的机器或同时处理另一个 exe 的较快的机器),我们发现在 10 秒的处理之后,如果您移动鼠标,我们会在页面上放置一个重复的形状;与页面上的第一个母版相同。
我能够 'see' 使用 SDK 中的 Visio 事件查看器实现这一点。似乎发生的事情是我们获得了 /dragbegin、/dragenter 的 MouseMove 事件、一堆 /dragover 事件,然后是 /drop,然后是形状的 ShapeAdded 事件,然后我们的处理就开始了。
当我再次移动鼠标时,我得到了另一组 /dragbegin /dragenter 和 /drop 事件,并且再次添加了 master。非常奇怪的是,第二个 /dragbegin 事件的事件编号索引比第一个 /dragbegin 事件低两倍,尽管已经发生了数千个事件。所以事件编号从 9xxx 到 775,然后回到 9xxx+1。
我感觉这是 Visio 中一个非常奇怪的错误,但我认为如果我可以取消那个 mousemove /dragbegin 事件,我可以减轻它。但是,我在 SDK 中看不到任何关于如何知道 mousemove 事件是 /dragbegin 事件的内容。事件查看器似乎知道,但我想知道如何弄清楚。
示例代码位于:
https://msdn.microsoft.com/en-us/library/ff767482(v=office.15).aspx
展示如何使用 Visio 的 AddAdvise 方法设置事件监视,以及如何对正在发生的 MouseMove 事件类型进行分类。
使用此方法并记录 /drop 事件,似乎 Visio 在低内存条件下多次传递同一事件,因此防止问题包括在遇到相同事件 ID 时阻止事件。
在 Visio 中工作时,我看到了一个奇怪的行为。将模板中的第一个形状拖放到页面上时,我们会进行一些处理,大约需要 10 秒。在某些机器上(通常是较慢的机器或同时处理另一个 exe 的较快的机器),我们发现在 10 秒的处理之后,如果您移动鼠标,我们会在页面上放置一个重复的形状;与页面上的第一个母版相同。
我能够 'see' 使用 SDK 中的 Visio 事件查看器实现这一点。似乎发生的事情是我们获得了 /dragbegin、/dragenter 的 MouseMove 事件、一堆 /dragover 事件,然后是 /drop,然后是形状的 ShapeAdded 事件,然后我们的处理就开始了。
当我再次移动鼠标时,我得到了另一组 /dragbegin /dragenter 和 /drop 事件,并且再次添加了 master。非常奇怪的是,第二个 /dragbegin 事件的事件编号索引比第一个 /dragbegin 事件低两倍,尽管已经发生了数千个事件。所以事件编号从 9xxx 到 775,然后回到 9xxx+1。
我感觉这是 Visio 中一个非常奇怪的错误,但我认为如果我可以取消那个 mousemove /dragbegin 事件,我可以减轻它。但是,我在 SDK 中看不到任何关于如何知道 mousemove 事件是 /dragbegin 事件的内容。事件查看器似乎知道,但我想知道如何弄清楚。
示例代码位于: https://msdn.microsoft.com/en-us/library/ff767482(v=office.15).aspx
展示如何使用 Visio 的 AddAdvise 方法设置事件监视,以及如何对正在发生的 MouseMove 事件类型进行分类。
使用此方法并记录 /drop 事件,似乎 Visio 在低内存条件下多次传递同一事件,因此防止问题包括在遇到相同事件 ID 时阻止事件。