Pregunta

Lo que sé sobre el evento Application.Idle es que la aplicación está terminando su procesamiento y está a punto de entrar en estado inactivo.

Leí en alguna parte que

Si tiene tareas que debe realizar antes de que el hilo se convierta inactivo, adjúntelos a este evento

Entonces, ¿esto significa que las tareas se realizarán antes de que el hilo quede inactivo o después de que el hilo quede inactivo?

Tengo un poco de código en mi proyecto, que se muestra a continuación.¿Se está realizando la actualización de la base de datos durante el tiempo de inactividad?

private void Application_Idle(object sender, EventArgs e)
{
    // Update the explorer's menuitems
    team.UpdateMenu();

    // Update display toolbars.
    team.UpdateToolBar();

    // Update SaveAll
    SaveAll.Enabled = teaj.IsModified;

    Up.Enabled = team.CanNavigateUp;
    ...
¿Fue útil?

Solución

Primero, entienda que la aplicación.idle es no sobre "ralentí", pero sobre el procesamiento de mensajes en el hilo de UI de la aplicación. (El raleo de rosca es diferente del bucle de mensaje inactivo)

La aplicación WinForms está impulsada por un bucle de mensaje que saca los mensajes de una cola. Cuando se vacía esa cola, el bucle de mensajes ingresa a un estado tranquilo, durmiendo de manera eficiente hasta que aparezca el siguiente mensaje en la cola de mensajes. Esto ayuda a conservar los recursos de procesamiento de la CPU (los ciclos desperdiciados en un bucle lleva tiempo de CPU lejos de otros procesos que se ejecutan en la máquina, por lo que todo se siente más lento) y también ayuda a reducir el consumo de energía / extender la vida útil de la batería del portátil.

El bucle de mensaje de su aplicación generalmente agota la cola de mensajes que se realiza con bastante frecuencia, incluso entre las pulsaciones de teclas cuando se escribe en un cuadro de edición.

El evento de Application.IDLE se ha convertido en un lugar conveniente para cuidar las tareas de limpieza de aplicaciones de manera asíncrona con las operaciones principales de la aplicación, y sin involucrarse con múltiples hilos.

Los menús y los botones suelen estar habilitados o deshabilitados para que coincidan con sus estados de comando correspondientes cuando la aplicación va inactiva, por ejemplo. Dado que la apariencia visible solo debe actualizarse en el tiempo de usuario (el usuario no puede discernir la diferencia entre los cambios en el estado visual exactamente en el momento de los cambios internos del estado en comparación con cambiar el estado visual unos cuantos milisegundos más adelante), el evento inactivo de la aplicación es Una oportunidad simple y efectiva para cuidar de tales tareas de limpieza.

Puede poner el código en la aplicación de su aplicación de WinForms.Dle para verificar una base de datos o un recurso de red. Sin embargo, debe tener cuidado de no hacer nada que tome "mucho tiempo" porque si bloquea la aplicación.IDle, toda su aplicación UI se congelará. Use las llamadas ASYNC en lugar de bloquear las llamadas.

Además, tenga en cuenta que la velocidad a la que los incendios de eventos de Application.IDLE es altamente variable, se puede disparar varias veces por segundo o no puede incendiarse durante varios segundos, dependiendo de lo que esté haciendo el usuario y su aplicación. Si desea verificar las actualizaciones de datos en un programa regular, debe usar un evento de temporizador en lugar de aplicar. Si inicia una solicitud de red de ASYNC cada vez de la aplicación. Engendros, puede inundar su servidor con muchas solicitudes (redundantes) por segundo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top