3

私のプログラムでは、OAuthにWebBrowserコントロールを使用しています。フォームにありvk_auth_windowます。したがって、コードでは。を呼び出しますvk_auth_window.WebBrowser1.Navigate(vkauthurl)。認証が成功した場合、私は黙ってトークンを取得しますが、ユーザーが認証されていない場合、ユーザーvk_auth_window名とパスワードを入力するためのフォームが表示されます。これを確認するには、_DocumentCompleteイベントをキャッチし、正しいURLを確認します。ユーザーが認証を完了するか、認証フォームを閉じるまで、他のコードを実行する必要はありません。ShowDialog()はこのトリックを実行しますが、WebBrowserコントロールのユーザー名とパスワードのフィールドからカーソルを隠します。そこで、変数を導入Dim showform as Boolean=Trueし、_DocumenCompleteイベントからFalseに設定し、メインコードでは無限ループを使用します。

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

ただし、スレッドがスリープするため、ユーザー入力が遅くなります。そして、それらを削除すると、CPUにかなりの負荷がかかります。フォームが閉じるのを待つより良い方法はありますか?それは何ですか?

4

1 に答える 1

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

于 2012-05-13T14:18:35.250 に答える