visual usar studio net form example ejemplos control asp vb.net winforms multithreading timer

vb.net - studio - Qué.Net Timer() usar



visual basic 2017 timer (5)

Tengo una aplicación heredada WinForms Mdi en VB.Net 2.0 a la que agrego funcionalidad. Una de las adiciones es una advertencia que debe plantearse cuando la hora actual se acerca a un valor especificado (una fecha límite). Mi intención es verificar la hora una vez por hora hasta que haya menos de una hora hasta la fecha límite, luego mostrar advertencias a intervalos específicos hasta que se acabe el tiempo.

El usuario debe poder seguir usando la aplicación hasta e incluso después de la fecha límite, pero debe conocer periódicamente la proximidad del plazo.

La aplicación no usa System.Threading todavía y mi conocimiento de esto es limitado en este momento. Sé que hay 3 métodos diferentes de Timer () disponibles:

  • System.Threading.Timer (),
  • Windows.Forms.Timer () y
  • System.Timers.Timer ()

Mi pregunta es, ¿cuál es la mejor manera de hacerlo? Intenté usar el temporizador de subprocesos, pero como WinForms no es seguro para subprocesos, recibí un error de tiempo de ejecución al intentar acceder a otra clase. ¿Vale la pena proteger el hilo de clase / forma? ¿Estoy completamente fuera de pista?

Gracias.



El System.Forms.Timer realmente funciona en el hilo principal usando la cola de mensajes de Windows. Esto lo hace algo impreciso, pero como realmente no necesitas ms precisión, es suficiente. Puede usar uno de los otros temporizadores que trabajan en un subproceso separado, pero como necesita activar un componente de winforms que funcione en el principal, necesitará usar Form.Invoke o de alguna otra forma para pasar el evento al hilo principal. que también causaría algo de latencia. En conclusión, use System.Forms.Timer cuando necesite activar un componente basado en winforms.


Este artículo explica muy bien:

Comparando las clases de temporizador en .NET Framework Class Library

Parece que System.Windows.Forms.Timer es el indicado para ti.

Mi guía: si quieres que el temporizador se ejecute en tu hilo principal de GUI, sigue con Windows.Forms.Timer. Si está bien que su temporizador se llame de manera asíncrona en un hilo del grupo de subprocesos, o si no desea experimentar las pequeñas demoras que System.Windows.Forms.Timer tiende a sufrir, use System.Timers.Timer. System.Threading.Timer tiene una interfaz diferente de las otras dos y no es seguro para subprocesos; personalmente, no soy fan


Ok, primero lo primero ...

Si quieres mostrarle al usuario un formulario y hacer algo en segundo plano, usaría la clase BackgroundWorker , me funcionó antes. Además, necesita invocar métodos como se mencionó anteriormente y, como dijo Chris, suena más difícil de lo que realmente es.

Aquí hay un enlace que creo que te ayudará.
http://msdn.microsoft.com/en-us/library/ms171728(VS.80).aspx


Solo usaría el temporizador Forms. Creo que leí que no es tan preciso, pero parece que no es necesario.