У меня есть приложение, работающее с полуфоновым материалом в потоке GUI.Другой поток не будет работать, и таймер не будет работать.Но я хочу, чтобы приложение реагировало, пока я выполняю свою «фоновую» работу.
Я могу использовать application.doevents - но это дает мне 3 неправильных варианта:
- loopбез снов - завершить привязку всего ЦП (моя задача ожидает чего-то еще, кроме calcs & I / O, так что это имеет значение)
- цикл со сном - тогда приложение замедляется
- Попробуйте сделать«Умный спящий» цикл, который ускоряется, когда происходит много сообщений (проверьте наличие сообщений в функции фильтра сообщений)
В хорошие ole 'дни в SDK я могу сделать это:
while(PeekMessage(&msg,0,0,0,PM_REMOVE) && still_working)
{
TranslateMessage( &msg );
DispatchMessage(&msg);
// do a bit of my background work with each message here, quit the loop when done.
}
Хотелось бы, чтобы он был немного лучше, чем DoEvents, поскольку он будет обрабатывать несколько сообщений подряд, но мне все еще нужно использовать «умный сон» для сохранения процессора - я бы хотел этого избежать.
Также есть ли способ сделать основной цикл обработки сообщений?
MSG msg;
while( GetMessage( &msg, NULL, 0, 0 ) )
{
TranslateMessage( &msg );
DispatchMessage( &msg );
}
Существует ли правильный эквивалент .NET, или мне просто нужно p / вызвать sdk?Спасибо!
РЕДАКТИРОВАТЬ Winforms.Для всех вас, отвечающих на вопрос, почему я не могу использовать application.run или потоки, я хочу обработать событие OnUnhandledException, а затем оставить приложение открытым на некоторое время, пока некоторые объекты winforms корректно закрывают его и сообщают моемусторожевая программа для перезапуска приложения. после , что также позволяет пользователю завершить критический процесс.Да, я знаю людей, что программа, получившая OnUnhandledException, заслуживает смерти (очевидно, MS), есть «опасные» вещи, которые могут произойти;однако ни один из них не так опасен, как гнев моих пользователей.
Edit # 2 - Ищет исходный код vb.net точных переводов двух вышеупомянутых функций.
Может быть, кто-то, кто хорошс помощью p / invoke и объявляет, может получить быстрое вознаграждение; -)