[VisualBasic2008Express]


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
)

よろしくお願い申し上げます。

回答の条件
  • 1人2回まで
  • 登録:
  • 終了:2010/01/27 14:35:58
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:freemann No.1

回答回数335ベストアンサー獲得回数55

ポイント60pt

次のようでどうでしょうか。

タイマーはデザイン画面で追加してます。

あと、指定された成功回数のカウンターをフィールドにしています。

また、読み込みがタイムアウトの場合の為のフラグを使っています。(ネーミングを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

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません