programacion - lenguaje c# pdf
¿Cuál es el método más simple de comunicación entre procesos entre 2 procesos de C#? (5)
Deseo comunicarme entre un proceso de padre e hijo ambos escritos en C #. Debe ser asincrónico, impulsado por eventos. No quiero ejecutar un hilo en cada proceso que maneje la muy rara comunicación.
¿Cuál es la mejor solución para eso?
Canalizaciones con nombre en WCF.
Si sus procesos en la misma computadora, simplemente puede usar stdio .
Este es mi uso, un screenshot de página 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<Bitmap>(buf);
}
finally
{
if (jobProcess.HasExited == false)
jobProcess.Kill();
}
Detectar args en 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);
}
}
//...
}
Sugeriría usar Windows Communication Foundation:
http://en.wikipedia.org/wiki/Windows_Communication_Foundation
Puede pasar objetos de un lado a otro, usar una variedad de protocolos diferentes. Sugeriría usar el protocolo tcp binario.
Tubos anónimos.
http://msdn.microsoft.com/en-us/library/bb546102.aspx
Use las operaciones asincrónicas con BeginRead / BeginWrite y AsyncCallback.