2010-02-22 42 views
2

我有兩個應用程序 - > App1和App2。 App1通過使用System.Diagnostic.Process()傳遞一些命令行參數來打開App2。用戶現在訪問App2。如何在C#中的兩個程序之間發送數據?

然而,當用戶更改應用1一些命令參數,我需要在不使用新的參數關閉它打開現有aplication(應用)。

我該怎麼做?

任何反饋意見將有幫助。

+5

我並不是要變得聰明或粗魯,而是標點符號是你的朋友。在上一個陳述中看到,我用了一個apostraphy,一個逗號和一個句號來幫助澄清我的意思。當他們不需要花時間研究你所要求的內容時,人們更願意提供幫助。 –

+2

是的,標點符號是你的朋友,不要粗魯,但不是每個人都以英語作爲第一語言。 –

+0

您應該嘗試更新問題標題,比如說「我如何在C#中的兩個程序之間發送參數?」對於看到你的問題的人來說,知道它是怎麼回事會有很多幫助。 – Danny

回答

4

您應該使用IPC。有關有用的鏈接,請參閱IPC Mechanisms in C# - Usage and Best Practices

+0

從技術上講,你重申了原來的問題,因爲IPC *是兩個不同進程之間的通信。通過你的鏈接,很明顯你指的是帶有WCF的IPC,這是解決這個問題的好辦法。 –

0

什麼你希望做的是不是直線前進。在.net中預先打包的方式稱爲Remoting,它內置在框架中並允許IPC(進程間調用)。

根據您的經驗水平,你可能會更好滾動這個你自己的簡化版本。例如有兩個程序使用文件傳遞數據。

應用1將參數寫入到一個文本文件(XML,分隔符,你的選擇真的)。

對App2的一個計時器,喚醒第二的每10個和檢查,看看是否有新的參數文件。如果是這樣,它會消耗它並刪除文件。

UPDATE
作爲正確地指出了由約翰·桑德斯,遠程處理已被WCF superseeded,但是仍然有大量的信息在那裏對Remoting的,它可能不上手不好的地方。

+0

實際上,遠程處理已被棄用,以支持WCF。 –

+0

@John:是的,我似乎記得正在宣佈。爲什麼我從來沒有邀請這些會議作出這些決定?這可能是一些過度勞累的微軟小夥子的疏忽,或者不久之後,所有那些過時的邀請都會發現我並涌入我的郵箱。 。 。現在的任何一天。 。 。 –

+0

我相信WCF的學習曲線有些陡峭,但是期望的協議看起來非常簡單,應該有類似簡單通信的良好示例代碼。 –

5

另一種選擇可能是一個基於WCF的解決方案。 見WCF Chat Sample

+0

+1,因爲在當前版本的.Net上,WC​​F是做IPC時的選擇。 –

0

我會去與WindowsFormsApplicationBase類(從Microsoft.VisualBasic裝配)用下面的代碼在我Program.cs文件:

using System; 
using System.Windows.Forms; 
using Microsoft.VisualBasic.ApplicationServices; 

namespace TestSolution 
{ 
    sealed class Program : WindowsFormsApplicationBase 
    { 
     /// <summary> 
     /// The main entry point for the application. 
     /// </summary> 
     [STAThread] 
     static void Main(string[] commandLine) 
     { 
      Application.EnableVisualStyles(); 
      Application.SetCompatibleTextRenderingDefault(false); 

      var program = new Program() 
      { 
       IsSingleInstance = Properties.Settings.Default.IsSingleInstance 
      }; 

      // Here you can perform whatever you want to perform in the second instance 

      // After Program.Run the control will be passed to the first instance  
      program.Run(commandLine); 
     } 

     protected override void OnCreateMainForm() 
     { 
      MainForm = new ImportForm(); 
     } 

     protected override bool OnStartupNextInstance(StartupNextInstanceEventArgs eventArgs) 
     { 
      // This code will run in the first instance 

      return base.OnStartupNextInstance(eventArgs); 
     } 
    } 
} 
1

爲什麼不普通的舊的TCP/IP使用套接字(客戶端和服務器)。

相關問題