Одним из вариантов будет создание именованного EventWaitHandle. Это создает объект синхронизации, который вы можете использовать в разных процессах. Затем ваши клиентские приложения ждут, пока событие не будет сообщено, прежде чем продолжить. Как только приложение главной консоли завершило запуск, оно может сигнализировать о событии.
http://msdn.microsoft.com/en-us/library/41acw8ct(VS.80).aspx
Например, ваше консольное приложение «Сервер» может иметь следующее. Это не скомпилировано, поэтому это просто отправная точка:)
using System.Threading;
static EventWaitHandle _startedEvent;
static void main()
{
_startedEvent = new EventWaitHandle(false, EventResetMode.ManualReset, @"Global\ConServerStarted");
DoLongRunnningInitialization();
// Signal the event so that all the waiting clients can proceed
_startedEvent.Set();
}
Клиенты тогда будут делать что-то вроде этого
using System.Threading;
static void main()
{
EventWaitHandle startedEvent = new EventWaitHandle(false, EventResetMode.ManualReset, @"Global\ConServerStarted");
// Wait for the event to be signaled, if it is already signalled then this will fall throught immediately.
startedEvent.WaitOne();
// ... continue communicating with the server console app now ...
}