托盘应用程序和服务以及正常的win表单全部c#

Posted

技术标签:

【中文标题】托盘应用程序和服务以及正常的win表单全部c#【英文标题】:Tray app and service and normal win forms all altogether c# 【发布时间】:2019-01-31 12:20:21 【问题描述】:

我正在开发一个应用程序以及它是如何变得复杂的。我想知道我的案例中的最佳原则以及我是否朝着正确的方向前进。

考虑一下:

    我有一个(一些)具有 IP 连接的物理设备

    我有一个 Windows 窗体应用程序 (App),我可以在不同的进程中拥有它的许多实例,它应该连接到一个物理设备并执行一些操作。

    我想通过服务管理与设备的连接。

    我想通过另一个服务管理设备配置(即向/从 XML 文件写入和读取),并且应用程序需要从该服务询问设备的一些信息。显然它应该通过连接服务应用配置。

    我想要一个托盘应用程序来直接访问这些服务和配置。

我假设我的应用程序有许多实例,例如许多文本编辑应用程序,它们希望通过/某些打印机打印文本。我想要的那个托盘应用程序就像打印机的托盘图标,它显示了队列,每件事都是这样。

处理我的服务和应用程序之间的相互通信的最佳方式是什么? WCF 也许?插座?命名管道? 我要最简单最快捷的方式,编码越少最简单快捷。

如果您对我的场景的每个部分有任何建议,我很高兴知道。 tnx。

编辑 1:我可以忘记服务并将它们的功能放在托盘应用程序中。这是一个不错的选择吗?

【问题讨论】:

【参考方案1】:

我尝试了一些不同的方法,最适合我的方法如下图所示。 主应用程序=我在问题中提到的应用程序 Help App = 一个可以最小化到托盘的新App

我使用了带有 TCP 连接的 WCF - 对于实时应用程序来说,http 连接非常慢 我在 Help App 和设备之间使用了 TCP 连接 我对 XML 配置文件使用了 IO-Read/Write

如果我想解释我使用 WCF 的方式,我应该说它就像一个聊天服务,应用程序通过预定义的消息(枚举)相互交谈,并在收到消息或发送消息作为回答时执行操作。异步消息传递有更好的结果,以免出现死锁或等待。

顺便说一下,我在 Windows 服务中创建了 WCF 主机。

【讨论】:

以上是关于托盘应用程序和服务以及正常的win表单全部c#的主要内容,如果未能解决你的问题,请参考以下文章

C#中的多线程启动画面?

优雅的 Win32 无窗口进程终止

如何在 C# Win 表单应用程序中使用 MS 通信器返回可用联系人列表?

Windows 服务与 Windows 窗体在同一进程中

C# 如何判断 DVD 驱动器托盘是不是打开?

win10uwp的qq怎么最小化到托盘里