Просто напишите свое, что-то вроде этого я и использую:
bool MyWaitAll(WaitHandle [] waitHandleArray, int timeout)
{
int wait = 1000;
int startTick = Environment.TickCount;
foreach (WaitHandle wh in waitHandleArray)
{
while(!wh.WaitOne(wait))
{
if((Environment.TickCount - startTick) > timeout)
{
return false;
}
}
}
return true;
}