Есть ли (или у вас есть собственный) предпочтительный способ обработки фонового изображения в срезах в потоке пользовательского интерфейса в Windows Forms? Как OnIdle() в MFC?Фоновая обработка на потоке пользовательского интерфейса? (Winforms)
В собственном программном обеспечении Windows вы можете использовать свой собственный цикл сообщений, но Application.Run() не дает нам доступ к контуру сообщения.
Событие Application.Idle не дает возможности запускать его повторно.
Я думаю, вы могли бы вызвать native PostMessage() с помощью P/Invoke (так как нет управляемой версии), чтобы опубликовать личное сообщение «WM_IDLE» и переопределить WndProc(), чтобы поймать его. Я не знаю, как это будет с Application.Run().
До сих пор я использовал короткий таймер для этого, но, боюсь, я могу потерять циклы спать, тем более, что фактическое разрешение таймера более грубое, чем номинальный минимум 1 мс.
1. AFAIK Многие из моих пользователей не имеют «современных систем» по этому определению. 2. Пользовательский интерфейс быстро использует новые данные, генерируемые фоновым процессом, следовательно, все обычные проблемы многопоточности. 3. 99% работы выполняется в фоновом режиме, поэтому отдельные ядра для пользовательского интерфейса и фона не будут покупать гораздо большую общую пропускную способность. –
@Conrad: Почему я действительно дал вам вариант, который полностью остается в потоке пользовательского интерфейса ... Однако даже «низкие» системы за последние 3-5 лет обычно имеют 2 ядра. Помещение всей вашей обработки на фоновый поток позволяет поддерживать активный пользовательский интерфейс даже в одноядерной системе с низким уровнем доступа и, вероятно, проще, чем пытаться выполнять плановую обработку во время простоя. Это, как говорится, подход выше работает очень хорошо ... –
@Conrad: Я только что понял - у меня была неправильная ссылка! Тот, который я поставил выше, должен иметь больше смысла ... Он использует Application.Idle с AppStileIdle в цикле - позволяет вам делать то, что вы хотели. (Извините за это - я вставил неверный ранее). –