2009-01-26 7 views
8

Tengo una aplicación de consola que está realizando una larga sincronización con un servidor ftp.
Otra aplicación de consola prepara un sistema de archivos local con algunos archivos actualizados necesarios.
Luego, el segundo esperará a que termine el primero antes de intercambiar un nombre de directorio final para que se vuelva visible en la web.Enviar mensaje de una aplicación de consola en ejecución a otra

He buscado la mejor manera de hacer que la aplicación de sincronización se comunique con la segunda aplicación que ha terminado su trabajo. Parece que Using Data Copy for IPC es la solución más adecuada para esto.

pregunta es doble:

  • Estoy en lo cierto? ¿Hay una forma más directa de obtener el mismo resultado?
  • ¿Hay una forma administrada (.net) de hacer esto?

Respuesta

10

Si todo lo que necesita es notificar a una aplicación que la otra ha completado su tarea, la manera más fácil sería usar una llamada EventWaitHandle. El objeto se crea en su estado no asignado. La primera aplicación espera en el mango, y la segunda aplicación señala el mango cuando termina de hacer su trabajo. Por ejemplo:

// First application 
EventWaitHandle waitForSignal = new EventWaitHandle(false, EventResetMode.ManualReset, "MyWaitHandle"); 

// Here, the first application does whatever initialization it can. 
// Then it waits for the handle to be signaled: 
// The program will block until somebody signals the handle. 
waitForSignal.WaitOne(); 

que pone en marcha el primer programa que esperar para la sincronización. La segunda aplicación es igualmente simple:

// Second app 
EventWaitHandle doneWithInit = new EventWaitHandle(false, EventResetMode.ManualReset, "MyWaitHandle"); 

// Here, the second application initializes what it needs to. 
// When it's done, it signals the wait handle: 
doneWithInit.Set(); 

Cuando la segunda aplicación llama a Set, señala el evento y la primera aplicación continuará.

+0

Esto suena muy bien. Lo pondré a prueba inmediatamente y regresaré aquí :) –

+0

Funciona como un encanto :) –

5

Otras opciones populares para el IPC son:

  • canalizaciones con nombre
  • Remoting (NET)
  • WCF

Si sólo necesita la sincronización, es posible considerar un Semaphore , o Mutex objeto. Existen clases que existen en el espacio de nombres System.Threading para .NET. Si crea versiones nombradas de estos, entonces se aplican a toda la máquina.

+0

No sé la mitad de las palabras que dices, pero investigaré un poco :); 1UP por darme las palabras clave :) –

Cuestiones relacionadas