アプリ版:「スタンプのみでお礼する」機能のリリースについて

VB2008でWebにアクセスしています。

アクセス時に次の関数を呼び出して、表示が完了するまで待機しています。

Private Function WebWait(ByVal time As Integer)
 Do While WebBrowser1.ReadyState <> WebBrowserReadyState.Complete
  Application.DoEvents()
 Loop
End Function

ただ、サイトが応答しなくてずっと待ったままになる場合があります。
10秒応答がなかった場合に処理を中断させたいのですが、方法が判りません。

PHPならば、タイムスタンプをスタート時間と比較して、終了判断させることができます。
こんな感じを考えています。

Private Function WebWait(ByVal time As Integer)
 スタート時間を格納
 Do While WebBrowser1.ReadyState <> WebBrowserReadyState.Complete
  Application.DoEvents()
  スタート時間と比較して、タイムアウトならLoopを抜ける
 Loop
End Function


しかし、VB2008で同様の関数を見つけることができませんでした。
dateandtimeで似たものはありますが、ずっとカウントアップするものではありませんでした。

適切な関数、もしくは方法がありましたら、教えてください。

よろしくお願いします。

A 回答 (3件)

タイマーコントロールを使ってはいかがですか?



タイムアウト用のフラグ変数を用意
dim m_bTimeOut as boolean

Private Function WebWait(ByVal time As Integer)
  ' タイマーの初期化
  Timer1.Enabled = false
  ' ms単位なので 10*1000 を代入
  Timer1.Interval = 10 * 1000
  ' フラグを初期化
  m_bTimeOut = false
  Do While WebBrowser1.ReadyState <> WebBrowserReadyState.Complete
  Application.DoEvents()
  if m_bTimeOut = true then
    Timer1.Enabled = false
    MsgBox "タイムアウトしました"
  end if
 Loop
 Timer1.Enabled = false
End Function

' タイマーイベント
Private Sub Timer1_Tick(引数省略)
  m_bTimeOut = true
  Timer1.Enabled = false
End Sub
といった具合で ・・・

この回答への補足

回答ありがとうございます。
タイマーコントロールは勉強不足でした。
名前は知っていたのですが、何だか難しそうで敬遠していました。
これを機会にチャレンジしてみます。

補足日時:2009/06/07 05:49
    • good
    • 1
この回答へのお礼

最終的にこのような形で無事に実現できました。
まずTimer1をフォーム上に設置してから、コードを次のようにしました。
目的どおりに動作しました。
ありがとうございます。

※スペースは全角です。
Dim WebWaitTimeOut As Boolean = False

Private Function WebWait(ByVal time As Integer)

 Timer1.Enabled = True ' タイマーの初期化
 Timer1.Interval = 10 * 1000 ' ms単位なので 10*1000 を代入
 WebWaitTimeOut = False ' フラグを初期化

 While WebBrowser1.ReadyState <> WebBrowserReadyState.Complete
  If action_loop = False Then Return True
   Application.DoEvents()
   If WebWaitTimeOut = True Then
    Timer1.Enabled = False
    Exit While
   End If
  End While
  Timer1.Enabled = False

  Return WebWaitTimeOut

End Function

Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
 WebWaitTimeOut = True
 Timer1.Enabled = False
End Sub

お礼日時:2009/06/08 03:22

No1.訂正


Sub sec_wait(Byref x )
Dim xsec As Variant
xsec = Second(Time)
If xsec = 59 Then
xsec = 1
Else
xsec = xsec
End If
Do While Second(Time) <= xsec + x
DoEvents
Loop
End Sub
10秒待つ時は、sec_wait(10)とする。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
この方法も試してみたいと思います。

お礼日時:2009/06/07 05:47

Sub sec_wait()


Dim xsec As Variant
xsec = Second(Time)
If xsec = 59 Then
xsec = 1
Else
xsec = xsec
End If
Do While Second(Time) <= xsec + 0.5
DoEvents
Loop
End Sub
これを使って10秒待つ時は、sec_wait(10)とする。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています