2015-01-17 63 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,以便它知道已經應用了所有的副作用。