Qual è il metodo più semplice di comunicazione tra processi tra 2 processi C #?

Voglio comunicare tra un processo genitore e figlio sia scritto in C #. Dovrebbe essere asincrono, basato su eventi. Non voglio eseguire una discussione in ogni processo che gestisce la comunicazione molto rara.

Qual è la migliore soluzione per questo?

Tubi anonimi.

http://msdn.microsoft.com/en-us/library/bb546102.aspx

Utilizzare le operazioni asincrone con BeginRead / BeginWrite e AsyncCallback.

Se i tuoi processi sono nello stesso computer, puoi semplicemente usare stdio .

Questo è il mio utilizzo, uno screenshooter della pagina web:

var jobProcess = new Process(); jobProcess.StartInfo.FileName = Assembly.GetExecutingAssembly().Location; jobProcess.StartInfo.Arguments = "job"; jobProcess.StartInfo.CreateNoWindow = false; jobProcess.StartInfo.UseShellExecute = false; jobProcess.StartInfo.RedirectStandardInput = true; jobProcess.StartInfo.RedirectStandardOutput = true; jobProcess.StartInfo.RedirectStandardError = true; // Just Console.WriteLine it. jobProcess.ErrorDataReceived += jp_ErrorDataReceived; jobProcess.Start(); jobProcess.BeginErrorReadLine(); try { jobProcess.StandardInput.WriteLine(url); var buf = new byte[int.Parse(jobProcess.StandardOutput.ReadLine())]; jobProcess.StandardOutput.BaseStream.Read(buf, 0, buf.Length); return Deserz(buf); } finally { if (jobProcess.HasExited == false) jobProcess.Kill(); } 

Rileva argomenti su Main

 static void Main(string[] args) { if (args.Length == 1 && args[0]=="job") { //because stdout has been used by send back, our logs should put to stderr Log.SetLogOutput(Console.Error); try { var url = Console.ReadLine(); var bmp = new WebPageShooterCr().Shoot(url); var buf = Serz(bmp); Console.WriteLine(buf.Length); System.Threading.Thread.Sleep(100); using (var o = Console.OpenStandardOutput()) o.Write(buf, 0, buf.Length); } catch (Exception ex) { Log.E("Err:" + ex.Message); } } //... } 

Suggerirei di utilizzare Windows Communication Foundation:

http://en.wikipedia.org/wiki/Windows_Communication_Foundation

È ansible passare oggetti avanti e indietro, utilizzare una varietà di protocolli diversi. Suggerirei di utilizzare il protocollo tcp binario.

C’è anche COM .

Ci sono tecnicismi, ma direi che il vantaggio è che sarai in grado di chiamare metodi che puoi definire.

MSDN offre tutorial di interoperabilità COM C #. Per favore cerca perché questi link cambiano.

Per iniziare, vai qui …

C’è anche MSMQ (Accodamento messaggi Microsoft) che può funzionare su reti e su un computer locale. Sebbene ci siano modi migliori per comunicare vale la pena esaminare: https://msdn.microsoft.com/en-us/library/ms711472(v=vs.85).aspx