【发布时间】:2012-06-29 18:27:14
【问题描述】:
我想要实现的简化版本:
- 我有一个 WinForms 应用程序在后台运行隐藏 (Visible = false)。
- 它只有一个Form,我保留了默认名称-Form1
- 此 WinForms 应用托管 WCF 服务。现在我们将其称为 Listener 服务。
- 此侦听器服务有一个名为“DisplayAlert()”的函数,该函数公开为服务函数
- 另一台计算机上的应用通过标准 WCF 服务调用向侦听器服务发送消息
我已经完成了上述所有工作。在调用 DisplayAlert() 函数时,我可以单步执行代码并观察消息流。
我想不通,我不敢相信要找到如何做这么简单的事情这么难:
- 我希望托管服务中的 DisplayAlert() 函数直接与托管它的 WinForm 交互以使表单可见。
我要做的就是将 Visibility 设置为 true,然后在 WinForm 上调用另一个函数。
在我看来,这应该就像添加对表单的引用一样简单,或者在表单上创建一个公共函数并从服务类调用它,但我什至不知道如何从在服务类中。
我是否遗漏了一些明显的东西?我如何引用托管服务的 Form1 的实例?
我已经走上了……的道路
- 在ListenerService中创建一个事件(AlertReceived,virtual void OnAlertReceived),想着在Form上,我可以添加一个事件处理程序。
- 没有骰子。我没有直接实例化 ListenerService 类,它在 ServiceHost 中运行。
- 尝试从类中引用 Application 对象,我认为我可以将其引用为 Application.Form1,但不行。我什至无法从服务类中看到 Application 对象。
- 我可能在这里遗漏了一些明显的东西,但我不确定。
还有其他建议吗?
如果有帮助,我可以添加代码。
【问题讨论】:
-
如果没有办法直接做到这一点,我将把它作为答案并重新考虑设计。