在VB.NET中连接到Application.DoEvents方法

时间:2009-07-25 10:07:44

标签: vb.net events

我对VB.NET不是很熟悉所以我不知道这是否可行......

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

显然我不希望在每个属性设置后发生这种情况,所以我需要在保存之前有延迟,或其他。

我已经在缓存实现中保留了大量实例,因此一个选项是不时地处理缓存,并将缓存中所有未保存的实例保存到数据库中。

所以我试着看看我是否可以从Application派生一个类(并覆盖DoEvents),但它是NotInheritable,所以没有运气。

有什么想法吗?

3 个答案:

答案 0 :(得分:1)

目前尚不清楚您是在谈论Windows消息泵还是.NET事件。无论哪种方式,都有一些常见的方法:

  • 更改发布商,以便在完成所有操作后只会引发单个事件;例如,通过数据绑定到BindingList<T>,您可以在执行大更新时将RaiseListChangedEvents设置为false,然后再将其设置为true并调用重置方法
  • 告诉目标禁用绘图等持续时间;例如,使用BeginEdit() / EndEdit()方法
  • 如果两者都不可能:处理事件,但不要立即做任何事情;只有在你相信没有其他事情要来的时候才会做某事例如,在做你的时髦之前加上一个短暂的延迟

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

答案 1 :(得分:0)

在EventArgs类中添加一个额外的字段,表示“已处理”。 然后,每个处理程序都会检查此字段,并仅在其为false时继续。然后,一旦完成,它将字段设置为True。

答案 2 :(得分:0)

没有“事件队列”。

您是在问这个问题是因为您看到过一个问题,还是因为您对此有疑虑?如果您询问问题,请编辑您的问题以包含有关问题的详细信息。如果您正在询问问题,请编辑问题以包含您关注的一些信息。