Каков эффект вызова Application.DoEvents() в фоновом потоке?

Как и вопрос: что делает Application.DoEvents() при вызове в фоновом потоке?

Чтобы дать некоторый контекст, я рассматриваю довольно сложное решение, написанное (не мной) для .NET CF на C#. Причина, по которой я рассматриваю его, заключается в том, что у него есть некоторые врожденные проблемы, которые меня попросили исследовать.

Один довольно интересный момент заключается в том, что приложение создает длительный фоновый поток при запуске, который входит в цикл времени. Это заканчивается вызовом Application.DoEvents() на каждой итерации цикла.

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

Почти наверняка это причина необъяснимого поведения приложения.


person pdriegen    schedule 23.10.2014    source источник
comment
Принятый ответ в этом сообщении SO касается вашего вопроса.   -  person dotNET    schedule 23.10.2014


Ответы (1)


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

person Johann Gerell    schedule 23.10.2014