
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で似たものはありますが、ずっとカウントアップするものではありませんでした。
適切な関数、もしくは方法がありましたら、教えてください。
よろしくお願いします。
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
といった具合で ・・・
この回答への補足
回答ありがとうございます。
タイマーコントロールは勉強不足でした。
名前は知っていたのですが、何だか難しそうで敬遠していました。
これを機会にチャレンジしてみます。
最終的にこのような形で無事に実現できました。
まず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
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)とする。
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が見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
レコードセットにnullの場合
-
subsequentとnextの違いってな...
-
タイムアウトする仕組みを作りたい
-
他のフォームから別のフォーム...
-
VBA public変数はどのようなこ...
-
チェックボックスを操作できな...
-
VB.NETでのイベントの途中終了
-
プロシージャまたは関数の引数...
-
VB2005テキストボックスへのコ...
-
C#のループでtextboxに値を入れ...
-
VS CodeでTEXファイルにPDF形式...
-
String型の値にスラッシュをつ...
-
VBAのフォーム カーソル移動
-
Would a text be "passage"?
-
Excel VBA: private sub 内の...
-
【VB6.0】 あるフォームから他...
-
二点の座標から距離や角度を求...
-
ExcelのVBAで文章にある複数の...
-
【VB.NET】テキストボックスに...
-
XMLファイルのattribute値がう...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
レコードセットにnullの場合
-
タイムアウトする仕組みを作りたい
-
subsequentとnextの違いってな...
-
delphi
-
最大公約数を再帰で求める(pas...
-
乱数の利用
-
変数に「.」が含まれる場合...
-
FORTRAN77でプログラミング
-
EXCEL VBA 文字 アドレス 検...
-
Select case で条件演算子は使...
-
TEXです
-
なんで? cEn-P^-1AP=P^-1(cEn-AP)
-
TreeViewのTag情報取得
-
verilogのcase文
-
文字の連結がうまくいかない
-
クラスモジュールの処理
-
パスカル言語
-
pascalでの二分探索(バイナリ...
-
Scilabの&と&&に関する質問です
-
vbsのmsgboxランダム表示について
おすすめ情報