2014-10-23 6 views
0

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

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

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

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

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

+0

Принятый ответ в [этой публикации] (http://stackoverflow.com/questions/6267001/does-doevents-effect-only-the-current-thread) решает ваш вопрос. – dotNET

ответ

4

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

Смежные вопросы