2009-01-26 22 views
8

Ich habe eine Konsolenanwendung, die eine längere Synchronisierung mit einem FTP-Server durchführt.
Eine andere Konsolen-App bereitet ein lokales Dateisystem mit einigen benötigten aktualisierten Dateien vor.
Dann wartet der zweite auf den ersten, bevor er den endgültigen Verzeichnisnamen ersetzt, so dass er im Web sichtbar wird.Nachricht von einer laufenden Konsolenanwendung an eine andere senden

Ich suchte nach der besten Möglichkeit, um die Synchronisierungsanwendung mit der zweiten App zu kommunizieren, dass es seinen Job beendet hat. Es sieht so aus, als ob Using Data Copy for IPC die beste Lösung dafür ist.

Frage ist zweifach:

  • Bin ich richtig? Gibt es einen direkteren Weg zum selben Ergebnis?
  • Gibt es eine verwaltete (.net) Möglichkeit, dies zu tun?

Antwort

10

Wenn Sie nur eine Anwendung benachrichtigen müssen, dass die andere ihre Aufgabe abgeschlossen hat, wäre der einfachste Weg, eine benannte EventWaitHandle zu verwenden. Das Objekt wird in seinem nicht signalisierten Status erstellt. Die erste App wartet auf den Griff, und die zweite App signalisiert dem Griff, wenn es seine Arbeit erledigt hat. Beispiel:

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

Damit wird das erste Programm eingerichtet, das auf die Synchronisation wartet. Die zweite Anwendung ist ebenso einfach:

Wenn die zweite Anwendung Set aufruft, signalisiert es das Ereignis und die erste Anwendung wird fortgesetzt.

+0

Das klingt mächtig gut. Werde sofort testen und hier zurückkehren :) –

+0

Funktioniert wie ein Charme :) –

5

Andere beliebte Optionen für IPC gehören:

  • Named Pipes
  • Remoting (.NET)
  • WCF

Wenn Sie nur die Synchronisation benötigen, können Sie eine Semaphore betrachten oder Mutex Objekt. Es gibt Klassen, die im System.Threading-Namespace für .NET vorhanden sind. Wenn Sie benannte Versionen von diesen erstellen, gelten sie für den gesamten Computer.

+0

Ich weiß nicht die Hälfte der Wörter, die du sagst, aber werde einige Nachforschungen machen :); 1UP für die Übergabe der Stichworte :) –

Verwandte Themen