2009-07-25 77 views
1

的Application.DoEvents方法我不是很熟悉,所以VB.NET,我不知道这是可能的...挂钩在VB.NET中

一些代码,我的工作是设置一个非常大的类的属性。在每个属性的setter中引发一个事件来指示类数据已更改。事件处理程序然后将该类的实例序列化到数据库。

很显然,我不希望每个属性设置后,这种情况发生,所以我需要要么有储蓄,还是其他什么东西之前的延迟。

我保持实例的大名单中的缓存实现了,所以一个选择是只处理缓存飘飞,并在高速缓存中保存所有未保存的情况下到数据库。

所以我想看看我是否能得到从应用类(或重写的DoEvents),但它是NotInheritable,所以没有运气。

任何想法?

+0

您的用例与计时器相关吗? – 2009-07-25 10:16:00

回答

1

不清楚你是在讨论windows消息泵还是.NET事件。无论哪种方式,有几种常见的方法:

  • 更改发布者,以便它只在引发一切事件时引发单个事件;例如,通过数据绑定到BindingList<T>,您可以在执行大更新时将RaiseListChangedEvents设置为false,然后再设置为true,并调用重置方法
  • 告诉目标禁用诸如绘制持续时间之类的内容;例如使用BeginEdit() /EndEdit()对方法
  • 如果既不是可能的:处理事件,但最好不要马上做任何事情;只有当你相信没有别的东西来时才做些事情;例如之前加入一个短暂的延迟,你做你的时髦的东西

最后的一个例子是在这里:Prevent events from firing multiple times from single action

0

添加一个额外的字段到您的EventArgs类,上面写着“处理”。然后,每个处理程序检查此字段,并且只有在它为假时才会继续。然后,一旦完成,它将字段设置为True。

0

没有“事件队列”。

你问到这个问题,因为有问题的,你见过,因为你有一个关心的,还是?如果您询问有关问题,请编辑您的问题以包含有关问题的详细信息。如果您在询问有关问题,请编辑该问题以包含您关心的一些信息。