VB2008(VB.NET)でプログラムしています。次のように挙動するサブルーチンのコードをお願いできますか。
1. wbName で、strUrl に格納されているURLを表示させることを試みる。
2. intWaitingTime の時間だけ、DocumentComplete イベントが発生するのを待つ。
3. DocumentComplete イベントが発生したら、intCompleteCount に 1 を足し、2に戻る。
3. intWaitingTime の時間が経過しても DocumentComplete イベントが発生しなくなったら、End Sub する。
どのようなコードを書けばよいでしょうか?
Subを次のように始めたいです。
Private Sub (
ByVal wbBrowserName As System.Windows.Forms.WebBrowser,
ByVal strUrl As String,
ByVal intWaitingTime as Integer,
ByRef intCompleteCount As Integer
)
よろしくお願い申し上げます。
次のようでどうでしょうか。
タイマーはデザイン画面で追加してます。
あと、指定された成功回数のカウンターをフィールドにしています。
また、読み込みがタイムアウトの場合の為のフラグを使っています。(ネーミングをblnTimeOutの方が良かったかも・・・
なぜこれが必要かというと、中止した時も完了のイベントが発生するようですので・・・
Public Class Form4
Private intCompleteCount As Integer = 0 '他のメソッドでも使用するのでフィールドにしました
Private blnCompleted As Boolean = True '読み込みがタイムアウトした時にはFalseに設定する
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim intWaitingTime As Integer = 3 'ダミーとして3秒としました
Me.ShowSite(Me.WebBrowser1, Me.TextBox1.Text, intWaitingTime, Me.intCompleteCount)
End Sub
'指定されたメソッドです
Private Sub ShowSite(ByRef wbBrowserName As WebBrowser, ByVal strUrl As String, ByVal intWaitingTime As Integer, ByRef intCompleteCount As Integer)
Me.Timer1.Interval = intWaitingTime * 1000 'ミリ秒に変換
Me.Timer1.Enabled = True
wbBrowserName.Url = New Uri(strUrl)
End Sub
Private Sub Form4_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'ウェブブラウザが完了した時の呼び出されるメソッドを登録
AddHandler Me.WebBrowser1.DocumentCompleted, New WebBrowserDocumentCompletedEventHandler(AddressOf wbDocumentCompleted)
End Sub
Private Sub wbDocumentCompleted(ByVal sender As Object, ByVal e As WebBrowserDocumentCompletedEventArgs)
If Me.blnCompleted Then
'タイマーがタイムアウトを告げる前に読み込みが完了した場合
Me.intCompleteCount += 1
Me.Timer1.Stop()
Me.Timer1.Enabled = False
MessageBox.Show("読み込み完了!")
Else
'タイムアウトの時は次回のためにフラグをリセットしておく
Me.blnCompleted = True
End If
End Sub
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
'読み込みを中止する
Me.WebBrowser1.Stop()
'タイムアウトのフラグを設定
Me.blnCompleted = False
Me.Timer1.Enabled = False
MessageBox.Show("タイムアウトのため中断しました。")
End Sub
End Class