1

C# アプリ (Win7 64) にタイマーがあります。タイマー コールバックは 20 分ごとに HTTP 経由でデータを取得します。それはうまくいきます。しかし、PC が数時間スリープ状態になってから復帰すると、「サーバーが見つかりません」という HTTP エラーが表示されます。サーバーは常に稼働しているため、実際の問題ではありません。本当の理由は、スリープ期間中にタイマーコールバックが「タイムスロット」を逃したため、「期限切れ」になり、PCがインターネット接続を再確立するのを待たずに、ウェイクアップ直後に即座に実行されるためだと思います. コールバックの最初にThread.Sleep(5000)を追加することで問題を解決できますが、これは少し手間がかかります (インターネット接続の確立には時間がかかる場合があります)。私の質問:

  1. スリープ モードから復帰した後、Win がインターネット接続を再確立するのに数秒かかりますか? 私の接続は DSL、「常にオンライン」です。

  2. Win がインターネット接続を確立するまで (または、たとえば 20 秒以内に確立されない場合はタイムアウトになるまで) 待機する C# システム コールはありますか?

編集:ちょうどこれを見つけました: Check Net connection in C# . 思ったほど単純ではありませんが、一連のチェックが必要です。すべてのLAN 接続、DNS ルックアップ (LAN 外)、サーバーへの ping (特定のサーバーのチェック) です。

4

2 に答える 2

2

1) はい 2) たとえば、WMI を介してさまざまな接続属性を確認できます。参照: http://msdn.microsoft.com/en-us/library/windows/desktop/aa394595%28v=vs.85%29.aspx および http://msdn.microsoft.com/en-us/library/ windows/desktop/aa394216%28v=vs.85%29.aspx を使用して、クエリを実行する前に接続を確認してください。

于 2011-11-27T03:46:58.560 に答える
1

WMIなどを気にする必要はないと思います。

ネットワークにアクセスできない場合は、タイマーを 20 分ではなく 1 分で起動するように設定してください。

于 2011-11-27T04:42:32.773 に答える