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

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

在我的程序中,我将 WebBrowser 控件用于 OAuth。它位于 vk_auth_window 表单中。所以在代码中我调用了 vk_auth_window.WebBrowser1.Navigate(vkauthurl)。如果身份验证成功,我会默默地获取 token ,但如果用户未通过身份验证,则会向他们显示表单 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。 有没有更好的方法来等待表单关闭?这是什么?

最佳答案

不要使用定时器。为此举办事件。 您必须订阅表单的 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

关于.net - 如何在没有 ShowDialog() 的情况下等待表单关闭?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10523990/

相关文章:

c# - 为什么返回的 DataTable 在 FileHelpers 中有只读列

c# - 系统.Windows.数据错误 : 40 : BindingExpression path error:

c++ - 为什么 C++ 需要语言修改为 "managed"?

asp.net 大约每三分钟出现一次奇怪的异常

c# - vb.Net c# 运行批处理文件并流式传输其输出

vb.net - 在 TeamCity 中构建 Web 部署项目时出现 "Incorrect Format"引用错误

python - 无需查找验证码即可完成Google Drive API OAuth 2.0 Procedure

c# - JavaScript 客户端函数未针对 ASP 自定义验证器触发

javascript - oAuth 失败 : Is not allowed … Access-Control-Allow-Origin

ios - 如何在iOS上实现Facebook原生登录?