繁体   English   中英

让多个 .NET 应用程序相互通信的最佳方式

[英]Best way to let multiple .NET apps communicate with each other

所以,首先对不起我的英语不好。 回到问题,我有一个主应用程序,带有一个选项卡控件,每个选项卡都包含另一个 .NET exe。 这些需要将信息发送到主应用程序。 示例:选项卡中的每个 exe每秒都有一个随机生成的 guid,主应用程序需要捕获它并在列表视图中显示或只要 exe 是“活动的”。

目前我正在使用 SQLite,每次启动一个新的 exe 时,都会在表格中写入。 在关闭它之前,这个 exe 从表中删除记录。 在主应用程序中,主应用程序检索此更新表并显示“活动”exe 和随机生成的 guid(每秒)。 一切正常,问题是我需要放弃这种方法并删除 SQLite 的两个 dll。

我尝试的是:

  • N 个客户端和主应用程序之间的 UDP 套接字,但不是那么稳定。 有时一些exe被冻结。 (使用 TCP 将如此“重”,仅用于发送短字符串。对吗?)
  • 更改另一个exe的window文本并通过processinfo检索它,但没有更新它,我只是第一次得到它。

那么,有没有办法呢? 在当地。 就像,我不知道.. user32 sendmessage 也许? 或者这种方法对于短字符串来说太具有侵入性了? 考虑到 N 个子 exe 是主进程“内部”的进程,没有办法从子进程获取信息吗?

谢谢你的帮助!

UDP 不保证按设计交付数据包。 除非你在它上面实现你自己的确认协议。 但是实现本身应该是稳定的。

使用 TCP 将提供类似的结果。 你只需要处理重新连接的东西。

SendMessage/PostMessage 是最简单直接的方法。 但它不允许你直接传递字符串。 查看 RegisterWindowMessage 以注册您自己的消息并使用 HWND_BROADCAST 句柄注册 SendMessage。 而且您必须将指针发送到您的字符串。 由于 SendMessage 是同步的,因此您应该可以很好地处理该消息,但我还没有尝试过。 另一种选择是将字符串存储在其他地方(注册表、文件)并使用 SendMessage 发送更新通知。 主应用程序将读取并删除该注册表/文件记录。

带有 netNamedPipeBinding 的自托管 WCF 也应该可以工作。 但这可能是过于强大的解决方案。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM