2011-11-29 7 views
5

が、私は2つのアイコンを表示する必要があるトレイのアイコンがあります。C#のスレッドとポーリング

  1. ネットワーク接続がある場合は、ネットワーク接続ではないがある場合は、チェックマーク
  2. と緑色の円が表示され、

    using System.Net.NetworkInformation; 
    
    bool isConnected = NetworkInterface.GetIsNetworkAvailable() 
    

    は、だから私は薄いです:

は、だから私が持っているものであるXと赤い円を表示

Form.Invoke(delegate, object[]) 

をNotifyIconクラスのアイコンのプロパティを更新する:トレイアイコンは、私が使用できないように、コンポーネントであるNotifyIconであるため、新しいスレッドを開始するか、バックグラウンドワーカーの進行を用いての王。私はありませんいくつかのロジックを記述することができます:

while (true) 
{ 
    System.Threading.Thread.Sleep(1000); 
    isConnected = NetworkInterface.GetIsNetworkAvailable(); 
    if (isConnected) 
     notifyIcon.Icon = "ConnectedIcon.ico"; 
    else 
     notifyIcon.Icon = "DisconnectedIcon.ico"; 
} 

が、私はスリープ(1000)から離れて滞在することを教えて記事のカップルを見てきました

私の大きな問題は、ポーリング処理です。私はそれらをブックマークしていないので、これらの記事を見つけることができないようです。私はそれがなぜスレッドでポーリングするのが良い考えではないのか不思議です。

+2

この上のスレッドのように高価な何かを焼くにはほとんどのポイントがあります。ちょうどタイマーを使用してください。 –

+0

http://meta.stackexchange.com/questions/2950/should-hi-thanks-taglines-and-salutations-be-removed-from-posts –

答えて

4

あなたはNetworkChangeにイベントを登録することができますがあなたが通知されたときにステータス変更:

NetworkChange.NetworkAvailabilityChanged += new NetworkAvailabilityChangedEventHandler(NetworkChange_NetworkAvailabilityChanged); 

void NetworkChange_NetworkAvailabilityChanged(object sender, NetworkAvailabilityEventArgs e) 
{ 
    if (e.IsAvailable) { 
     Console.WriteLine("Network Available"); 
    } else { 
     Console.WriteLine("Network Unavailable"); 
    } 
} 
1

あなたの状況では、完全にスリープメソッドを使用することができます。

あなたは見たことは、おそらくReset Eventを使用するために、その優れたそう言っていた - などのループから...

+0

ここで投票する理由はありません。すでにフレームワークAPIがありますネットワーク接続が変更されたときにイベントを提供します。 –

0

ポーリングが常に悪ではありませんが、可能であればそれが最善の回避です。 1秒に1回ポーリングするアプリケーションを実行すると、1秒に1回、99.9999%のノーオペレーションになるCPUコアでプログラムを実行する予定です。それほど恐ろしいことではないが、ラップトップを想像するデスクトップで。可能であれば、CPUは非常に低電力モードで動作しようとするため、CPUを追加することでバッテリ寿命が短くなります!これが、多くのモバイルプラットフォーム(iOS、Windows Phone 7など)が人を虐待することを知っているため、任意のバックグラウンドスレッドを禁止する理由です。

あなたの場合、より簡単な方法があります:System.Net.NetworkInformation.NetworkChangeを使用すると、ネットワーク接続が変更されたときのイベントが提供されます。ポーリングは必要ありません!