【问题标题】:Let the EventHandler wait for a function让 EventHandler 等待一个函数
【发布时间】:2015-03-15 23:56:05
【问题描述】:

我遇到了以下问题。

我有两个 ObservableCollections coll1coll2。添加到第一个 ObservableCollection coll1 时,我在 coll1_CollectionChanged 中添加了一些操作数据到 coll2 - 这会触发 coll2_CollectionChanged

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

问题是,coll2_CollectionChanged EventHandler 应该等到func1 准备好(包括查询),但它没有。总而言之,coll2_CollectionCHanged 有三个 Add Actions,每次 Add 之后,EventHandler 应该等待 func1 准备好。

func1 中的查询是一个异步函数。我将func1 标记为异步并使用等待调用查询。比我让 EventHandler 调用 func1 也异步 - 我使 EventHandler 异步并用 await 调用 func1。但它不会等待。

【问题讨论】:

  • 你能展示一下代码的实际样子吗?
  • 我现在无法显示它,因为代码正在运行。但看起来像我描述的那样)
  • 那么,你所描述的应该有效。

标签: c# silverlight asynchronous async-await eventhandler


【解决方案1】:

但它不会等待。

当然可以。事件 handler 暂停,等待 func1 完成。当它暂停时,它会返回到它的调用者——async 的中心点。

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

一个更简单的解决方案是更改您的逻辑,例如,您的 other 代码将异步等待func1,以便知道所有副作用都已应用。

【讨论】:

    猜你喜欢
    • 2021-10-02
    • 1970-01-01
    • 1970-01-01
    • 2014-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-29
    • 1970-01-01
    相关资源
    最近更新 更多