2009-01-26 13 views
8

Mam jedną aplikację konsolową, która wykonuje dłuższą synchronizację z serwerem ftp.
Inna aplikacja konsolowa przygotowuje lokalny system plików z niektórymi potrzebnymi zaktualizowanymi plikami.
Następnie drugi zaczeka na zakończenie pierwszego, a następnie zamienia nazwę katalogu końcowego, aby był widoczny w Internecie.Wyślij wiadomość z jednej działającej aplikacji konsolowej do innej

Szukałem najlepszego sposobu, aby aplikacja synchronizująca komunikowała się z drugą aplikacją, w której zakończyła pracę. Wygląda na to, że najlepiej nadaje się do tego Using Data Copy for IPC.

Pytanie jest dwojakie:

  • mam rację? Czy istnieje bardziej prosty sposób na uzyskanie tego samego wyniku?
  • Czy istnieje sposób zarządzania (.net) to zrobić?

Odpowiedz

10

Jeśli wszystko, czego potrzebujesz, to powiadomić jedną aplikację, że druga zakończyła swoje zadanie, najprościej będzie użyć nazwy o nazwie EventWaitHandle. Obiekt jest tworzony w stanie unsignaled. Pierwsza aplikacja czeka na klamce, a druga aplikacja sygnalizuje uchwyt, gdy kończy pracę. Na przykład:

// 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(); 

Ustawia pierwszy program oczekiwania na synchronizację. Druga aplikacja jest równie prosta:

// 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(); 

Gdy druga aplikacja wywoła funkcję Set, sygnalizuje to zdarzenie i pierwsza aplikacja będzie kontynuowana.

+0

To brzmi potężnie. Natychmiast przetestuje i wróci tutaj :) –

+0

Działa jak czar :) –

5

Inne popularne opcje dla IPC obejmują:

  • Named Pipes
  • Remoting (NET)
  • WCF

Jeśli potrzebujesz tylko synchronizację, można rozważyć Semaphore lub obiekt Mutex. Istnieją klasy, które istnieją w przestrzeni nazw System.Threading dla .NET Jeśli utworzysz ich nazwane wersje, wówczas będą one dotyczyć całego komputera.

+0

Nie znam połowy słów, które wypowiadacie, ale będziecie robić badania :); 1UP za przekazanie mi słów kluczowych :) –

Powiązane problemy