DOBON.NET DOBON.NETプログラミング掲示板過去ログ

オフライン・オンラインイベントを取得したい

環境/言語:[Win2K,XP VB.NET,C#.NET]
分類:[.NET]

今回、初めて質問させて頂きます。
宜しくお願い致します。

現在、VB.NETでネットワークケーブルを物理的に抜いたり挿したりしたときの、オンライン/オフラインの状態をイベントとして取得し、プログラムを動作させたいと考えています。

具体的には、ネットワークが接続されオンライン化されたら、バックグランドで必要なデータをダウンロードする処理を行いたいと考えています(バックグランドでのダウンロードなのでもちろん途中でネットワークを切断されたときやシャットダウンをされたときの処理は別に処理します)。
現在ネットワークが使えるかどうかを判断するプロパティの存在は調べて見つけたので、Timerイベントを使用してこのプロパティをチェックすることも考えたのですが、イベントとして実装できたほうが、よりプログラムがすっきりすることと、余分なリソースを消費しなくてすむのではないか、と考えております。

.NETのMSDNライブラリとインターネットの検索を探しまわったのですが、合致する情報を見つけることができませんでした。

調べ方でも結構ですので、ご指導賜りたく、何卒、宜しくお願い致します。
■No5950に返信(まささんの記事)
> 今回、初めて質問させて頂きます。
> 宜しくお願い致します。
>
> 現在、VB.NETでネットワークケーブルを物理的に抜いたり挿したりしたときの、オンライン/オフラインの状態をイベントとして取得し、プログラムを動作させたいと考えています。
>
> 具体的には、ネットワークが接続されオンライン化されたら、バックグランドで必要なデータをダウンロードする処理を行いたいと考えています(バックグランドでのダウンロードなのでもちろん途中でネットワークを切断されたときやシャットダウンをされたときの処理は別に処理します)。
> 現在ネットワークが使えるかどうかを判断するプロパティの存在は調べて見つけたので、Timerイベントを使用してこのプロパティをチェックすることも考えたのですが、イベントとして実装できたほうが、よりプログラムがすっきりすることと、余分なリソースを消費しなくてすむのではないか、と考えております。
>
> .NETのMSDNライブラリとインターネットの検索を探しまわったのですが、合致する情報を見つけることができませんでした。
>
> 調べ方でも結構ですので、ご指導賜りたく、何卒、宜しくお願い致します。

まささん、こんにちは。
実は、まささん自身が答えを見つけています。
ヒントはTimerイベントです。
どうも、イベントを勘違いしているみたいなので、軽く説明しますが、
イベントといっても結局はループ処理であって、Windowsが常にメッセージを受け取る状態でループしていて、そのメッセージを受け取った時、プログラムがイベントとして実行しているにすぎないのです。
つまり、ユーザーが何か処理をする。例えばマウスを動かす、キーを打つことなどでメッセージが発生し、プログラム側がイベントとして私たちに教えてくれているのです。当然、ハード的な処理も何かのプログラムが監視しているからなのです。
う〜〜〜ん、説明し辛いな・・・「WndProc、Windows SDK、message」なんかをググったら、私の言いたい事のヒントが見つかるかも・・・
Windows SDKについてなら、少しハードルが高いかもしれませんが、
ttp://www.kumei.ne.jp/c_lang/index_sdk.html
がお勧めです。

話が脱線しましたが、結局、ネットワークケーブルを引っこ抜いたところでイベントは発生しません。
Timerイベントまたはスレッドを使ってプロパティチェックをし、「通信不可能発生イベント」を作るのが手っ取り早く、スマートではないでしょうか?

DOBON.NET | プログラミング道 | プログラミング掲示板