2011-11-29 12 views
5

मैं एक ट्रे आइकन दो आइकन प्रदर्शित करने की आवश्यकता है है:सी # सूत्रण और मतदान

  1. अगर कोई नेटवर्क कनेक्टिविटी है, एक जाँच चिह्न
  2. साथ हरे रंग का गोला प्रदर्शित अगर कोई कनेक्टिविटी नेटवर्क नहीं है,

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

    तो मैं पतली हूँ: एक एक्स

तो मैं क्या है के साथ एक लाल वृत्त प्रदर्शित

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

मतदान हमेशा बुराई नहीं है, लेकिन यह सबसे अच्छा यदि संभव हो तो बचा है। यदि मैं प्रति सेकंड एक बार मतदान कर रहा हूं, तो इसका मतलब है कि प्रति सेकंड एक बार आपका प्रोग्राम एक सीपीयू कोर पर काम करने के लिए निर्धारित हो रहा है जो 99.9 999% नो-ऑप होने वाला है। एक डेस्कटॉप पर जो बहुत भयानक नहीं है, लेकिन एक लैपटॉप की कल्पना करें। सीपीयू जब भी संभव हो बहुत कम पावर मोड में चलाने की कोशिश करते हैं, तो अतिरिक्त सीपीयू काम का मतलब बैटरी जीवन कम है! यही कारण है कि कई मोबाइल प्लेटफॉर्म (आईओएस, विंडोज फोन 7, आदि) मनमाने ढंग से पृष्ठभूमि धागे पर प्रतिबंध लगाते हैं क्योंकि वे जानते हैं कि लोग उनका दुरुपयोग करेंगे।

आपके मामले में, एक आसान तरीका है: बस System.Net.NetworkInformation.NetworkChange का उपयोग करें जो नेटवर्क कनेक्टिविटी में परिवर्तन के लिए ईवेंट प्रदान करता है। कोई मतदान की आवश्यकता नहीं है!

संबंधित मुद्दे