private void wait(WaitingFor waitingFor, bool startSelection)
{
Commands.ModelCommand mc;
selectionFilter = waitingFor;
if (startSelection)
controller.SelectionCommand.Start(this);
while (selectionFilter != WaitingFor.None)
{
// if ModelCmd has been cancelled or ModelCmd is no longer registered on the Controller
// Cancel the command and stop the waiting
if (((mc = controller.ModelCommand) == null) || ((mc != null) && (mc.Cancel)))
throw new CancelCommandException();
// Para evitar que este ciclo se coma todo el cpu, porque
// DoEvents sólo pasa el control al MessageLoop de la aplicación
// para que cheque si hay mensajes y en caso contrario regresa
// inmediatamente, lo que hace que este ciclo se convierta en un
// while que consume el 100% del cpu nomás por esperar
// (Exactamente como el PropertyGrid cuando despliega un DropDown)
// La llamada a la rutina de abajo duerme al hilo hasta que ocurra
// cualquier evento, con lo que se arregla el problema
Canguro.Utility.NativeHelperMethods.WaitInMainThread(250);
}
}