2013-03-16 23 views
2

如何使process-1能夠在process-2中觸發一個事件併發送少量參數來指示第二個進程執行特定操作並可選擇接收回復?如何讓一個進程在c#/ .net的另一個進程中觸發一個事件?

可以使用文件系統來做到這一點,可能有一個文件,其中進程1轉儲一些命令/查詢,並且進程2將不斷從該文件讀取,但是,這種解決方案並不好。

還有其他的辦法嗎?

(我知道它在VB.net容易在運行過程中觸發一個事件,每當一個新進程啓動,如果「單一實例」,在項目屬性中啓用)

回答

1

This article似乎做你已經習慣vb.net single instance(它似乎仍然是一個可行的選擇)。

總之似乎有三種方法來實現單一實例一樣的解決方案:

  • 使用Mutex
  • 循環通過進程列表,看是否有相同名稱的進程已經運行
  • 使用的「過程」的單一實例的應用程序在Visual Basic系統(你可以從C#訪問)
1

如果你的意思是「應用程序域」,它在兩者之間建立事件很容易。事實上,如果您在兩個獨立的應用程序域(每個類都有MarshalByRefObject作爲基類)中有兩個類,那麼.net將自動設置一個遠程處理結構,使事件看起來像在單個應用程序中一樣運行 - 域。 (例如:http://msdn.microsoft.com/en-us/library/system.marshalbyrefobject.aspx

雖然這裏的關鍵是'出現'。 '應用程序域'和'流程'分離旨在保持資源有意孤立。要訪問您的流程之外的任何東西,您真的需要操作系統的幫助,例如共享文件或互聯網連接或命名管道 - 這樣做的結果。但是.net這樣的概念並不存在於運行時的空間之外。

換句話說,你必須使用類似命名管道(http://msdn.microsoft.com/en-us/library/system.io.pipes.namedpipeserverstream.aspx)如果兩個進程都在同一臺機器,的TcpClient /的TCPListener(http://msdn.microsoft.com/en-us/library/system.net.sockets.tcpclient.aspx)。如果跨多個系統進行通信,或者WCF如果你需要更多的東西重負。

如果你想在實踐中看到這些技術的一個具體例子,我可以爲你寫一個,順便說一句。

相關問題