2012-05-09 2 views
1

В моей программе я использую элемент управления WebBrowser для OAuth. Он расположен на vk_auth_window форме. Поэтому в коде я звоню vk_auth_window.WebBrowser1.Navigate(vkauthurl). Если аутентификация прошла успешно, я молча получаю токен, но если пользователь не аутентифицирован, то для отображения имени пользователя и пароля отображается форма vk_auth_window. Чтобы проверить это, я перехватываю событие _DocumentComplete и проверяю правильный URL. Мне не нужно, чтобы какой-либо другой код выполнялся до тех пор, пока пользователь не завершил проверку подлинности или закрытую форму аутентификации. ShowDialog() делает трюк, но он каким-то образом скрывает курсор от полей имени пользователя и пароля в элементе управления WebBrowser. Итак, я ввел переменную Dim showform as Boolean=True и установил ее в False из события _DocumenComplete, а в основном коде я использую бесконечный цикл.Как подождать, когда форма будет закрыта без ShowDialog()?

While showform 
     System.Threading.Thread.Sleep(100) 
     Application.DoEvents() 
End While 

Однако он заставляет пользователя медленно работать из-за нитей. И если я удалю их, он загрузит CPU довольно много. Есть ли лучший способ подождать, когда форма закрывается? Что это?

+0

Нет, там нет (пока VB11). Используйте обработчики событий. – SLaks

+2

Считаете ли вы использование таймера? –

ответ

5

Не используйте таймер. Для этого делаются события. Вам необходимо подписаться на событие FormClosing вашей формы. Код, который должен быть выполнен после закрытия окна, должен быть в методе обработчика события.

Используйте ключевое слово AddHanlder.

AddHandler yourForm.FormClosing, AddressOf FormClosingEventhandler 

Позже использовать обработчик события для продолжения:

Private Sub FormClosingEventhandler() 
    'proceed here 
End Sub 

http://msdn.microsoft.com/en-us/library/system.windows.forms.form.aspx
http://msdn.microsoft.com/en-us/library/system.windows.forms.form.formclosing.aspx