如何跟踪多个事件发生的时间?

时间:2009-08-01 21:51:52

标签: c# events event-handling

我正在编写一个程序的插件,我需要跟踪在活动文档中添加,删除和编辑本机对象的时间。 API具有在编辑文档时触发的事件。但是,程序不会跟踪本机对象何时实际更改。相反,对象更改被视为要删除的对象,然后立即替换为具有相同ID的另一个已修改对象。这样做是为了让程序可以跟踪撤消记录。

经过一些实验后,我确定事件的发生方式如下:

添加了一个对象: OnAddObject事件

删除了一个对象: OnDeleteObject事件

对象已更改: OnReplaceObject事件 - > OnDeleteObject事件 - > OnAddObject事件

现在我的插件只是在观察OnAdd和OnDelete事件,它正在添加和删除自定义对象的实例与集合。但这也意味着每次对象更改我的插件时都会删除重新初始化一个几乎相同的对象。我只是想知道文档对象已经改变,所以我的自定义对象可以刷新而不是完全重新实现。

我订阅OnDelete和OnAdd事件的方法怎么能告诉对象没有被添加或删除,但是因为它已经改变而被替换了?

3 个答案:

答案 0 :(得分:0)

跟踪文档ID。

答案 1 :(得分:0)

由于原始程序的错误事件结构,这有点难度。也许你可以将字典中被删除的项目的ID与当前时间一起放入。

这样你就可以创建单独的线程来检查字典的内容(当它包含项目时)。为每个项目提供几毫秒(比较来自dict的DateTime。),以便启动Add事件,从而确定它是常规删除还是替换。

这有点低效,因为你必须减慢几毫秒的删除速度。但我想不出更好的方法。

答案 2 :(得分:0)

我建议引入“锁定”变量(例如bools)

当Replaced事件触发时,将它们设置为锁定

在添加和删除时检查锁定变量。如果将它们设置为锁定,请将它们设置为解锁并返回。