如何在没有ShowDialog()的情况下等待表单关闭?

时间:2012-05-09 21:00:13

标签: .net vb.net oauth webbrowser-control showdialog

在我的程序中,我使用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相当多。 有没有更好的方法等待表格关闭?它是什么?

1 个答案:

答案 0 :(得分: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

相关问题