Приложение.Значение события Idle

что я знаю о Application.Idle событие заключается в том, что приложение завершает обработку и переходит в состояние покоя.

Я где-то читал, что

Если у вас есть задачи, которые вы должны выполнить, прежде чем поток станет idle, прикрепите их к этому событию

значит ли это, что задачи будут выполняться до того, как поток станет бездействующим, или после того, как поток станет бездействующим?

у меня есть кусок кода в моем проекте, показанный ниже. Выполняется ли обновление базы данных во время простоя?

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;
    ...

1 ответов


во-первых, поймите, что приложение.На холостом ходу не о "thread idle", но об обработке сообщений в потоке пользовательского интерфейса приложения. (Поток idle отличается от цикла сообщений idle)

ваше приложение WinForms управляется циклом сообщений, который вытаскивает сообщения из очереди. Когда эта очередь опустошена, цикл сообщений переходит в спокойное состояние, эффективно спит, пока следующее сообщение не появится в очереди сообщений. Это помогает экономить ресурсы обработки ЦП (циклы, потраченные впустую, вращаются в цикле, отнимают время процессора от других процессов, запущенных на машине, поэтому все кажется медленнее), а также помогают уменьшить энергопотребление / продлить срок службы батареи ноутбука.

цикл сообщений вашего приложения обычно исчерпывает отставание очереди сообщений довольно часто-даже между нажатиями клавиш при вводе в поле редактирования.

Приложение.Idle событие стало удобным местом, чтобы заботиться о применении хозяйственных работ асинхронно с основными операциями приложения и без участия нескольких потоков.

меню и кнопки обычно включены или отключены, чтобы соответствовать их соответствующим состояниям команд, когда приложение простаивает, например. Поскольку видимый внешний вид должен обновляться только во время пользователя (Пользователь не может различить разницу между изменениями визуального состояния точно во время внутренних изменений состояния по сравнению с изменением визуального состояния несколько миллисекунды спустя), событие простоя приложения-это простая и эффективная возможность позаботиться о таких домашних делах.

вы можете поместить код в приложение вашего приложения Winforms.Idle для проверки базы данных или сетевого ресурса. Однако вы должны быть осторожны, чтобы не делать ничего, что занимает "много времени", потому что если вы блокируете приложение.В режиме ожидания весь пользовательский интерфейс приложения замерзнет. Используйте асинхронные вызовы вместо блокировки вызовов.

кроме того, имейте в виду, что скорость, с которой Приложение.Холостые пожары события сильно переменны - они могут быть запущены несколько раз в секунду или не могут работать в течение нескольких секунд, в зависимости от того, что делает пользователь и ваше приложение. Если вы хотите проверять наличие обновлений данных по регулярному расписанию, вместо приложения следует использовать событие таймера.Праздный. Если вы запускаете асинхронный сетевой запрос каждый раз, когда приложение.Простоя пожаров, вы можете затопить ваш сервер с большим количеством (избыточных) запросов в секунду.