Как событие .NET, Application.OnIdle, закодировано в Win32? - PullRequest
3 голосов
/ 26 июля 2010

Как событие .NET, Application.OnIdle, кодируется в Win32? (т.е. что происходит за кулисами?).

1 Ответ

1 голос
/ 26 июля 2010

Классический цикл сообщений Win32 выглядит примерно так:

while (GetMessage(&msg, NULL, 0, 0)) {
    TranslateMessage(&msg);
    DispatchMessage(&msg);
}

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

while (GetMessage(&msg, NULL, 0, 0)) {
    do {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    } while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE));
    onIdle();
}

Вышеуказанный цикл будет вызывать перевод / отправку, пока еще есть сообщения, доступные для обработки, а затем, когда их больше нет, он вызывает onIdle(). Затем он возвращается во внешний цикл, чтобы снова вызвать GetMessage(), чтобы дождаться следующего сообщения.

Обратите внимание, что это один из возможных способов реализовать функциональность onIdle в Win32. Я не знаю, так ли это .NET делает это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...