簡體   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