2011-08-24 12 views
6

He hecho una solicitud de examen en C# que tiene un temporizador, mientras que el examen supone que el candidato sigue presionando el botón minimizar de Windows (sin soltar el mouse) en 1 minuto y 30 segundos, el el tiempo se detiene incluso si el candidato sigue presionando el mouse durante 10 minutos, pero cuando se suelta el mouse, el tiempo se reanuda desde el mismo instante en que se detuvo, es decir, 1 minuto y 30 segundos. Quiero que el temporizador continúe sin pausas.C# solicitud de examen temporizador problema

+2

Es evidente que usted está haciendo algo en el hilo de interfaz de usuario que no se debe hacer en el hilo de interfaz de usuario. Por favor publique su código. –

Respuesta

4

¿Qué componente del temporizador estás usando? System.Windows.Forms.Timer o System.Threading.Timer?

Sospecho que el S.W.F.Timer usa la llamada a la API SetTimer que usa mensajes de ventana que explican lo que está viendo, un temporizador con rosca sería mejor.

También podría utilizar un hilo, almacenar un DateTime.UtcNow y cada 100ms o algo en el hilo, obtener otro DateTime.UtcNow y verificar el TimeSpan durante el tiempo transcurrido.

1

Puede registrar el DateTime.UtcNow cuando se inicia la prueba y controlar ese DateTime.UtcNow - startTime en el evento Elapsed de un temporizador. Si la diferencia es mayor de lo que desea, puede finalizar la prueba allí.

+3

Desea usar UtcNow en Ahora porque, aunque es poco probable, la zona horaria/dst podría cambiar, lo que afectaría el valor. – Lloyd

+0

Buen punto @Lloyd –

2

utilizar la clase System.Threading.Timer debido a que se supone que funciona independientemente de mensajes de ventanas