Альтернатива Application.DoEvents () - PullRequest
5 голосов
/ 19 июля 2011

Я разрабатываю систему обмена сообщениями, основанную на элементах управления webBrowser, чтобы я мог форматировать текст по своему усмотрению. Когда пользователь находится в автономном режиме и отправляет сообщения, сообщения сохраняются, и при каждом входе в систему для каждого сообщения отправляется событие. Когда я устанавливаю html по умолчанию и тому подобное для веб-сайта, я обычно использую:

while (this.webBrowser1.ReadyState != WebBrowserReadyState.Complete) Application.DoEvents();

Это работает, когда программа работает нормально. Когда пользователь получает сообщение, отправленное в автономном режиме, это вызывает следующее событие сообщения и т. Д., С каждым сообщением до последнего. Это означает, что отображается только последнее сообщение, отправленное в автономном режиме. Я хотел бы что-то вроде Application.DoEvents (), который позволяет элементу управления обновлять и загружать, но не вызывает другие события.

Спасибо

EDIT:

Я исправил проблему, полностью удалив DoEvents (). Вместо того, чтобы изменять DocumentText, как я работал, я настраивал построитель строк, а затем устанавливал HTML сразу в конце.

Ответы [ 2 ]

5 голосов
/ 19 июля 2011

Я рекомендую вам прекратить использование Application.DoEvents(), это создает проблемы больше, чем решает. отметьте это .

Лучший способ - использовать AutoResetEvent, чтобы уведомлять о завершении загрузки, или вызывать событие при завершении загрузки. также вы можете запустить ожидание в другом потоке, поэтому не нужно использовать Application.DoEvents() ...

0 голосов
/ 19 июля 2011

Вы можете использовать System.Threading.Thread.Join () в качестве альтернативы DoEvents (), поскольку этот метод останавливает выполнение вашего текущего потока до тех пор, пока предыдущий поток вызова не завершит выполнение.

...