3

在我的程序中,我使用 WebBrowser 控件进行 OAuth。它位于vk_auth_window表格上。所以在我调用的代码中vk_auth_window.WebBrowser1.Navigate(vkauthurl)。如果身份验证成功,我会默默地获取令牌,但如果用户未通过身份验证,vk_auth_window则会向他们显示一个表单以输入用户名和密码。要检查这一点,我会捕获 _DocumentComplete 事件并检查正确的 URL。在用户完成身份验证或关闭身份验证表单之前,我不需要执行其他代码。ShowDialog() 可以解决问题,但它以某种方式隐藏了 WebBrowser 控件中用户名和密码字段的光标。因此,我在 _DocumenComplete 事件中引入了一个变量Dim showform as Boolean=True并将其设置为 False,并且在主代码中我使用了无限循环。

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

但是,由于线程休眠,它会使用户输入变慢。如果我删除它们,它会大量加载 CPU。有没有更好的方法来等待表单关闭?它是什么?

4

1 回答 1

5

不要使用定时器。为此举办了活动。您必须订阅 Form 的 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

于 2012-05-13T14:18:35.250 回答