2012-05-09 77 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並將其從_DocumenComplete事件中設置爲False,並在主代碼中使用了無限循環。如何等待沒有ShowDialog()的表單關閉?

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

但是,由於線程休眠,它使用戶輸入緩慢。如果我刪除它們,它會加載CPU相當多。 有沒有更好的方法來等待表單關閉?它是什麼?

+0

沒有,沒有(直到VB11)。使用事件處理程序。 – SLaks

+2

你有沒有考慮過使用定時器? –

回答

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