代码之家  ›  专栏  ›  技术社区  ›  Joel Barsotti

.NET中的事件和多线程代码

  •  0
  • Joel Barsotti  · 技术社区  · 16 年前

    项目是C。

    所以我有一堆多线程代码,它们被设计成作为一个库来运行。它在一个独立于用户界面的项目中。

    我的库有一个中心对象,需要在创建任何触发事件之前创建该对象。

    是否可以将此主对象传入某些对象中,以便我的事件能够确定何时需要调用它们以返回主UI线程?

    我真的不想让UI做大量的调用,因为他的事件处理程序几乎总是从一些随机的后台线程调用。

    3 回复  |  直到 16 年前
        1
  •  9
  •   Reed Copsey    16 年前

    根据您所描述的,您的最佳选择可能是使所有对象 SynchronizationContext 作为其构造函数中的参数。

    如果你这样做,当你需要提出一个事件,你可以使用 SyncrhonizationContext.Post 在UI线程上“调用”事件。

    这样,您的库将不依赖于UI(可以在Windows窗体或WPF中工作),并且您可以根据需要在UI线程上引发事件。

    库的用户只需使用 SynchronizationContext.Current (这在Windows窗体和WPF应用程序中为您提供了一个有效的上下文,而不引入对两者的引用)。

        2
  •  0
  •   Doug L.    16 年前

    使用计时器或响应事件,UI线程(或线程上的数据绑定对象)可以轮询“状态”对象并限制UI必须执行的工作量。

        3
  •  0
  •   GrayWizardx    16 年前

    你看过吗 Facade , Proxy , Factory Singleton 模式?

    如果将核心对象实现为单例,并提供代理和工厂方法来生成这些对象并将其交付给库的调用者,那么这将变得相当直接。facade模式可以通过抽象掉后端中正在发生的事情的大部分内部来简化这一过程。

    将factory和singleton结合在一起,并确保您想要公开的所有类都有需要您的主对象的构造函数,这是一种很好的方法来实施这种设计。我不知道你们图书馆的主要要求/设计,所以我不确定这是否适合你们。