【问题标题】:How to pass a message to open a window using WCF如何使用 WCF 传递消息以打开窗口
【发布时间】:2011-03-02 20:31:28
【问题描述】:

我正在使用 C#/WCF 构建应用程序。将有一个主窗体项目本质上是连接所有其他项目 (DLL) 的东西,并且 DLL 不知道或不允许相互引用。然而,在一个 DLL 中,比如患者 dll,有一个带有按钮的表单,当单击该按钮时,它需要在不同的 dll 中打开一个表单,比如 rx dll,但两个 DLL 不能相互引用它们只是通过主窗体连接。

所以我想知道是否有可能完成这样的任务,如果可以,该怎么做。如果可能,我宁愿不使用消息队列或发送消息。

感谢您的任何建议或帮助。

【问题讨论】:

  • 所以您是说您的 dll 不能相互引用,但可以相互引用服务,并且仍然存在于客户端计算机上运行的同一个应用程序中?为什么?享受这样的建筑的乐趣......
  • @Ladislav 这实际上在 C# 的以组件为中心的模式中很常见。 observer pattern 在管理某些组件以不同配置使用的大型项目时特别有用,并有助于将 UI 与程序逻辑分开。
  • @Tamschi:是的观察者模式——但你不会将它实现为远程调用。
  • 等一下,这很奇怪...@Nicole:您是否使用 WCF (Windows Communication Foundation) for WinForms-“Forms”显示在不同 PC 或WPF (Windows Presentation Foundation) 与 XAML-“Windows”在同一台计算机上?
  • @Tamschi 我的主要窗体和 DLL 是 Windows 窗体应用程序/客户端应用程序,然后我有一个主机应用程序和一个 wcf 服务项目,至少现在是这样。我对 WCF 完全陌生,WCF 服务现在实际上什么都不做,我可能不会使用它,但这只是我们正在考虑的一个想法,我添加了它以防万一有办法通过 wcf 服务做到这一点。

标签: c# wcf message


【解决方案1】:

您可以将表单与事件联系起来:

使用按钮将其添加到表单中:

  public event Action OpenOtherFormClick;

  button_Click (object sender, EventArgs e) //Link to the button's Click event...
  {
      if (OpenOtherFormClick != null) { OpenOtherFormClick()}
  }

将此添加到主项目中:

  instanceOfFormWithButton.OpenOtherFormClick += () =>
  {
      //Open other form, e.g.
      new OtherForm().Show();
      //or
      new OtherForm().ShowDialog();
      //or, with factory class:
      FormFactory.ShowOtherForm();
  };

或者:

  instanceOfFormWithButton.OpenOtherFormClick += FormFactory.ShowOtherForm;

工厂的优势在于您可以将某些表单限制为单个实例,例如仅显示一次详细表单,并且仅在它已经打开时才聚焦它。

【讨论】:

    【解决方案2】:

    我不确定我是否真正理解你的问题,但你可以看看MEF
    但是您可以使用 WCF 进行进程间通信 (net.pipe),但这不是一个好习惯。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-12-09
      • 2011-05-03
      • 2021-04-24
      • 2022-11-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多