![]() |
1
8
您可以做的是让windows服务有注册事件的方式(您可以通过使用windows Communication Foundation来做到这一点)。当出现错误时,它将触发该事件,并通知您的winforms应用程序。这叫做双重合同: http://social.msdn.microsoft.com/Forums/en-US/wcf/thread/0eb69998-0388-4731-913e-fb205528d374/ http://msdn.microsoft.com/en-us/library/ms731184.aspx 实际上,真正酷的是,您可以让多个应用程序也这样监听。所以你可以在屏幕上显示它,然后让另一个应用程序记录它等等,而这两个外部应用程序对彼此一无所知。 |
![]() |
2
3
我知道这一点已经提到过了,但请使用Windows通信基础(WCF)。具体来说,使用 Publish-Subscribe Framework 开发单位 Juval Lowy ,作者 Programming WCF Services . 详情见 this excellent MSDN article ,并且源代码在 Lowy's website . 这个框架的精妙之处在于,它将发布者(例如,您的Windows服务)与任何订阅者(例如,您的GUI)分离。发布者“发布”与发布/订阅服务(始终可用)相关的事件。从出版商的角度来看,有没有订户并不重要。Pub/Sub服务负责将事件路由到任何和所有注册的订阅者。这样,您的Windows服务会在事件发生时发布事件,当加载/退出时,您的GUI将订阅/取消订阅PUB/SUB服务,而PUB/子服务将在事件发生时通知您的GUI。 我已经在我的项目中使用了这个设置,它工作得非常好。 |
![]() |
3
2
|
![]() |
4
2
您所描述的是进程间通信,它可能会变得混乱。 最简单、最优雅、但可能反应最少的方法是将服务写入条目作为小文本文件(或附加到日志中),并让您的GUI使用FileSystemWatcher来检测新文件或日志文件的更新,并读取该文件。您必须确保服务以“共享”方式打开要追加的文件,允许在写入时进行只读访问。否则,您将阻塞一个或另一个进程,可能会导致丢失消息。 进程可以通过一些内置管道进行通信。如果服务将消息写入其标准输出管道,则GUI可以远程附加侦听器,并在写入消息时接收事件。这可能是最优雅的非文件方式做你想要的。研究进程类,特别是OutputDataReceived事件。您必须使用GetProcess()从GUI中通过一些唯一的标识信息来查找进程。 |
![]() |
5
0
你需要寻找“同步”和“进程间通信”。在您的情况下,服务将使用全局事件或信号量来表示数据的存在,GUI进程将检查事件/信号量状态,并从事件日志或文件中读取更新。 存在更复杂的场景,但以上是一个很好的起点。 |
![]() |
6
0
观察者模式! 可能是所有可观察模型的委托,您可以将其与您的服务挂钩? |
![]() |
7
0
IPC通道上的.NET远程处理。 |
![]() |
JOO · 使用udpClient从多个IP地址连续接收数据 2 年前 |
![]() |
Futterkiste · 函数比例图 2 年前 |
![]() |
user18789895 · 我应该如何验证WinForms应用程序? 2 年前 |
![]() |
beriscen · 如何使整个链接标签区域可点击? 2 年前 |
![]() |
lpmaxim · 当鼠标光标悬停在按钮上时,背景图像会移动 2 年前 |