• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:タイムアウトする仕組みを作りたい)

Webアクセス時のタイムアウト処理について

このQ&Aのポイント
  • VB2008でWebにアクセスする際、タイムアウト処理を実装したいと考えています。
  • Webブラウザの応答がない場合に、処理を中断させるためには、タイムスタンプを使用してスタート時間と比較する方法が考えられます。
  • しかし、VB2008で同様の関数を見つけることができず、他の適切な関数や方法を探しています。

質問者が選んだベストアンサー

  • ベストアンサー
  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.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 といった具合で ・・・

muuuuu
質問者

お礼

最終的にこのような形で無事に実現できました。 まず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

muuuuu
質問者

補足

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

その他の回答 (2)

  • yyr446
  • ベストアンサー率65% (870/1330)
回答No.2

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)とする。

muuuuu
質問者

お礼

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

  • yyr446
  • ベストアンサー率65% (870/1330)
回答No.1

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)とする。

関連するQ&A