Ant*_*ean 8 c# timeout console-application
我有一个启动的控制台应用程序,托管一堆服务(长时间运行的启动),然后等待客户端调用它.我有集成测试,启动此控制台应用程序并进行"客户端"调用.在进行客户端调用之前,如何等待控制台应用程序完成其启动?
我想避免这样做,Thread.Sleep(int)
因为这取决于启动时间(可能会改变),如果启动速度更快,我会浪费时间.
Process.WaitForInputIdle
仅适用于具有UI的应用程序(我确认它在这种情况下会引发异常).
我对尴尬的解决方案持开放态度,让控制台应用程序在准备就绪时写入临时文件.
Chr*_*lor 10
一种选择是创建一个名为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();
}
Run Code Online (Sandbox Code Playgroud)
然后客户会做这样的事情
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 ...
}
Run Code Online (Sandbox Code Playgroud)