usar tutorial tareas que puede programación operadores net mvc metodos metodo manejo llamar invocar example eventos evento ejemplos ejemplo desuscribirse crear con carece await asíncrona async asincronos asincrono c# events asynchronous

tutorial - La mejor forma de hacer eventos asincrónicos en C#



static async task c# (5)

Los eventos son sincrónicos en C #. Tengo esta aplicación donde mi formulario principal comienza un hilo con un bucle que escucha una transmisión. Cuando algo aparece en la transmisión, se dispara un evento desde el bucle hasta la forma principal.

Si el formulario principal es lento o muestra un cuadro de mensaje o algo, el ciclo se suspenderá. ¿Cuál es la mejor manera de evitar esto? ¿Al usar una devolución de llamada e invocar en el formulario principal?


Como está utilizando un formulario, la forma más sencilla es usar el componente BackgroundWorker .

La clase BackgroundWorker le permite ejecutar una operación en un subproceso dedicado y separado. Las operaciones que consumen mucho tiempo, como las descargas y las transacciones de bases de datos, pueden hacer que su interfaz de usuario (UI) parezca que ha dejado de responder mientras se están ejecutando. Cuando desea una interfaz de usuario receptiva y se enfrenta a largas demoras asociadas con tales operaciones, la clase BackgroundWorker proporciona una solución conveniente.


Hmmm, he usado diferentes escenarios que dependían de lo que necesitaba en ese momento.

Creo que el BeginInvoke probablemente sea el código más fácil ya que casi estás allí. De cualquier manera, ya deberías usar Invoke, así que simplemente cambia a BeginInvoke. Utilizar una devolución de llamada en un subproceso independiente logrará lo mismo (siempre que utilice el subproceso de subprocesos para poner en cola la devolución de llamada) como el uso de BeginInvoke.



Tiene algunas opciones, como ya se detalla, pero en mi experiencia, es mejor que deje delegados y BeginInvoke, y use BackgroundWorker en su lugar (v2.0 +), ya que es más fácil de usar y también le permite interactuar con el forma principal en la terminación del hilo. En general, he encontrado una solución muy bien implementada.


System.ComponentModel.BackgroundWorker es de hecho un buen punto de partida. Hará su trabajo asincrónico, le dará notificaciones de eventos importantes y tendrá formas de integrarse mejor con sus formularios.

Por ejemplo, puede activar las notificaciones de progreso registrando un controlador para el evento ProgressChanged. (que es muy recomendable si tiene un proceso asincrónico largo y no desea que su usuario piense que la aplicación se congeló)