2015-01-17 41 views
-5

我遇到了以下问题。让EventHandler等待函数

我有两个ObservableCollections coll1,coll2。在添加到第一个ObservableCollection coll1时,我将coll1_CollectionChanged中的一些操纵数据添加到coll2中 - 这引发了coll2_CollectionChanged

根据动作(添加,删除,重置)我让coll2_CollectionCHanged调用一个函数。问题是,这个函数(让我叫它func1)启动另一个异步函数(查询)。在查询调用之后,函数func1应该执行另一个操作 - 更新一些数据。

问题是,coll2_CollectionChanged EventHandler应该等待,直到func1准备好(包括查询),但它不。总而言之,有3个添加动作到coll2_CollectionCHanged,并且在每次添加之后,EventHandler应该等待func1做好准备。

func1中的查询是一个异步函数。我将func1标记为async,并用await调用查询。比我让EventHandler还以async的身份调用func1 - 我使EventHandler异步并且在等待时调用func1。但它不会等。

+4

你能展示代码实际上的样子吗? – i3arnon

+0

我现在无法显示它,导致代码在工作。但它看起来像我描述它) –

+4

那么,你所描述的应该工作。 – i3arnon

回答

0

但它并不等待。

当然可以。事件处理程序已暂停,等待func1完成。当它暂停时,它返回到它的主叫方 - async的中心点。

你想要的行为是让代码提高ObservableCollection.CollectionChanged事件到(异步)等待事件处理程序完成。这并不容易;试图扭曲内置的ObservableCollection类来支持这将是非常困难的(也许不可能)。

一个更容易的解决方案是改变你的逻辑,使得你的其他代码将异步等待func1,以便它知道已经应用了所有的副作用。