私は5分ごとにインターネット接続を失うPCを持っています。(理由を説明するのに長い)。
バックグラウンドで、10分ごとにC#タイマーを実行しています。これは、非常に単純な処理を実行します。
WebBrowser bobo = new WebBrowser();
bobo.Navigate(url);
while(bobo.ReadyState != WebBrowserReadyState.Complete){Application.DoEvents();}
string responsestring = bobo.DocumentText.ToString();
bobo.Dispose();
// and then do some stuff with responsestring
ページの読み込み時にbobowebbrowserDIDがインターネットに接続されていることを確認することが非常に重要です。それ、どうやったら出来るの?
「try-catch」ステートメントを試しましたが、インターネットがない場合でも例外はスローされません。
「読み込み完了」ハンドラーを実行することを考えましたが、プログラムが非常に複雑になり、メモリを大量に使用するため、他の方法を探しています。
私の最新の解決策は次のとおりです。
...
while(bobo.ReadyState != WebBrowserReadyState.Complete){Application.DoEvents();}
if (bobo.DocumentTitle == "Navigation Canceled"){throw new DivideByZeroException();}
...
boboブラウザでは問題なく動作します。しかし、responsestringを使用する場合、他の多くのブラウザーを(1つずつ)作成しますが、このソリューションはそこでは機能しません。
私が言及しなかった他の種類のテストはありますか?
解決策が見つかりました:
どうもありがとう。
私はあなたのソリューションを使用しませんでした(接続がオフになってから数秒後にTRUEを返します)。
しかし、私はこれを見つけました:
[DllImport("wininet.dll", SetLastError = true)]
static extern bool InternetCheckConnection(string lpszUrl, int dwFlags, int dwReserved);
public static bool CanConnectToURL(string url)
{
return InternetCheckConnection(url, 1, 0);
}
文字通りPINGをURLに送信し、回答を受信した場合はTRUEを返し、それ以外の場合はFALSEを返します。完璧に動作します。