Если все, что вам нужно, это уведомить одно приложение о том, что другое выполнило свою задачу, самый простой способ - использовать именованный EventWaitHandle. Объект создан в своем неподписанном состоянии. Первое приложение ожидает дескриптор, а второе приложение сообщает дескриптору, когда оно завершает свою работу. Например:
// 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();
Устанавливает первую программу, ожидающую синхронизации. Второе приложение одинаково просто:
// 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();
Когда второе приложение вызывает Set, оно сигнализирует о событии, и первое приложение продолжит работу.