.net 如何在没有ShowDialog()的情况下等待窗体关闭?

.net 如何在没有ShowDialog()的情况下等待窗体关闭?,.net,vb.net,oauth,webbrowser-control,showdialog,.net,Vb.net,Oauth,Webbrowser Control,Showdialog,在我的程序中,我对OAuth使用WebBrowser控件。它位于vk\u auth\u窗口表单上。因此在代码中我调用vk\u auth\u window.WebBrowser1.Navigate(vkauthurl)。若身份验证成功,我将以静默方式获取令牌,但若用户未通过身份验证,则会向他们显示一个表单vk_auth_窗口,以输入用户名和密码。要检查这一点,我将捕获_DocumentComplete事件并检查正确的URL。在用户完成身份验证或关闭身份验证表单之前,我不需要执行其他代码。 Show

在我的程序中,我对OAuth使用WebBrowser控件。它位于
vk\u auth\u窗口
表单上。因此在代码中我调用
vk\u auth\u window.WebBrowser1.Navigate(vkauthurl)
。若身份验证成功,我将以静默方式获取令牌,但若用户未通过身份验证,则会向他们显示一个表单
vk_auth_窗口
,以输入用户名和密码。要检查这一点,我将捕获_DocumentComplete事件并检查正确的URL。在用户完成身份验证或关闭身份验证表单之前,我不需要执行其他代码。 ShowDialog()实现了这一点,但它在WebBrowser控件的用户名和密码字段中隐藏了光标。 因此,我在中引入了一个变量
Dim showform作为Boolean=True
,并在_DocumenComplete事件中将其设置为False,在主代码中我使用无限循环

While showform
       System.Threading.Thread.Sleep(100)
       Application.DoEvents()
End While
但是,由于线程休眠,它会使用户输入变慢。如果我删除它们,它会给CPU带来很大的负载。
是否有更好的方法等待表单关闭?这是什么?

不要使用计时器。为此举办了各种活动。 您必须订阅表单的FormClosing事件。窗口关闭后应执行的代码必须位于事件处理程序方法中

使用AddHanlder关键字

AddHandler yourForm.FormClosing, AddressOf FormClosingEventhandler
稍后使用事件处理程序继续:

Private Sub FormClosingEventhandler()
    'proceed here
End Sub


不,没有(直到VB11)。使用事件处理程序。你考虑过使用计时器吗?