2009-01-26 6 views
8

J'ai une application de console qui effectue une longue synchronisation avec un serveur ftp.
Une autre application de console prépare un système de fichiers local avec certains fichiers mis à jour nécessaires.
Ensuite, le second attendra que le premier se termine avant de permuter un nom de répertoire final afin qu'il devienne visible sur le Web.Envoyer un message d'une application de console en cours d'exécution à une autre

J'ai recherché la meilleure façon de faire de l'application de synchronisation pour communiquer à la deuxième application que c'est fini son travail. Il semble que Using Data Copy for IPC est la solution la mieux adaptée pour cela.

Question est deux fois:

  • Ai-je raison? Y a-t-il un moyen plus direct d'arriver au même résultat?
  • Existe-t-il un moyen géré (.net) de le faire?

Répondre

10

Si tout ce dont vous avez besoin est de notifier une application que l'autre a terminé sa tâche, le plus simple serait d'utiliser un EventWaitHandle nommé. L'objet est créé dans son état non signalé. La première application attend sur le handle, et la deuxième application signale le handle quand il a fini de faire son travail. Par exemple:

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

Cela définit le premier programme à attendre la synchronisation. La deuxième application est tout aussi 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(); 

Lorsque la deuxième application appelle Set, elle signale l'événement et la première application continue.

+0

Cela semble fort bien. Test immédiatement et retour ici :) –

+0

Fonctionne comme un charme :) –

5

Autres options populaires pour IPC comprennent:

  • Pipes nommés
  • Remoting (.NET)
  • WCF

Si vous avez seulement besoin de synchronisation, vous pouvez envisager une Semaphore ou Mutex objet. Il existe des classes dans l'espace de noms System.Threading pour .NET. Si vous en créez des versions nommées, elles s'appliquent à l'ensemble de la machine.

+0

Je ne connais pas la moitié des mots que vous dites, mais je ferai des recherches :); 1UP pour me donner les mots-clés :) –

Questions connexes