【问题标题】:Raising events so that they are handled on a the same thread as original subscriber引发事件,以便在与原始订阅者相同的线程上处理它们
【发布时间】:2010-09-10 22:05:19
【问题描述】:

在使用 C# 4.0 的 dotNET 中,如何确保发生在任意线程 X 上的事件将调用与订阅线程 A、B 或 C 相同的线程(或同步上下文)中的处理程序。

我试图避免将与线程相关的代码放入处理程序方法或事件站点。

如果我不必更改 += 和 -= 订阅以及“公共事件 EventHandler myevent;”,那就太好了代码。

【问题讨论】:

    标签: multithreading events .net-4.0 c#-4.0 event-handling


    【解决方案1】:

    我不认为你可以直接这样做。您可以做的最好的事情是注册将在某个任意线程上运行的处理程序,但会将数据传递给原始线程。

    【讨论】:

    • 我相信这种事情可以让程序员的工作效率稍微提高一点……哦,只是一点点。
    • 也许,但我不相信它特别有用。它有用的一个地方是处理 GUI,它只需要从 UI 线程修改它们的控件。但是,WinForms 和 WPF 都有解决方案。否则,事件在哪个线程中执行并不重要。
    • 我实际上有一个持续运行的编排器,其形式是在后台运行的复杂状态机。我希望后端逻辑和 GUI 提供将驱动状态机的事件。状态机在线程 X 上运行,GUI 在线程 Y 上运行,通信在线程 Z 上运行。
    • 不,我已经考虑过了,但我仍然不同意。对不起。
    【解决方案2】:

    这目前可以通过 TaskCompletionSource, 结合 async/await 的默认行为来完成,这会将事情带回到调用同步上下文。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多