2009-08-06 10 views
6

ठीक है, इसलिए मैं थोड़ा उलझन में हूं कि मुझे यह कहीं भी क्यों नहीं मिल रहा है, या यदि यह अस्तित्व में नहीं है तो माइक्रोसॉफ्ट ने इसे क्यों लागू नहीं किया है?नेटवर्कस्ट्रीम, क्या सीरियलपोर्ट के लिए डेटा रीसीसेव के समान कुछ है? (सी #)

तो यहां मेरा परिदृश्य है, मेरे पास नेटवर्कस्ट्रीम है, जिसमें डेटा अवांछित नामक एक प्यारा छोटा बूलियन है, और मुझे जो चाहिए वह एक घटना है, जो बाहर निकलती है और कहती है "अरे, आपके लिए डेटा उपलब्ध है!" (क्योंकि मैं आलसी हूं और मुझे यह बताया जाना चाहिए कि "ठीक है, क्या कोई डेटा उपलब्ध है?" पूछने के बजाय डेटा उपलब्ध है, जब तक मुझे प्रतिक्रिया न मिल जाए "असल में, इस बार वहां है")।

कुछ ऐसा ही एक सीरियलपोर्ट (जिसमें एक अच्छी घटना (डेटा रिसीव) है, जो कृपया मुझे सूचित करता है कि बंदरगाह से डेटा प्राप्त किया जा रहा है) अच्छा होगा। लेकिन मैं नेटवर्कस्ट्रीम के साथ सॉकेट का उपयोग कर रहा हूं।

मुझे सही दिशा में इंगित करें यदि कुछ स्पष्ट रूप से स्पष्ट है कि मुझे याद आ रही है, लेकिन यदि नहीं, तो इसका मतलब यह है कि मुझे डेटा उपलब्ध संपत्ति पर कुछ डेटा बाइंडिंग का उपयोग करना होगा, और जब यह सत्य पर सेट हो जाएगा , अपना खुद का 'घर बनाया' घटना/समारोह कॉल करने के लिए? यदि यह तरीका हो सकता है तो कृपया गेंद को रोल करने के लिए कृपया मुझे एक छोटा सा उदाहरण दें?

संपादित
मेरे आदर्श जवाब किसी के साथ आए के लिए करने के लिए और मैं कैसे प्राप्त कर सकते हैं मुझे समझा/अत्यंत DataReceived घटना के लिए कुछ इसी तरह एक serialport के साथ प्रयोग किया बनाने के लिए, लेकिन एक सॉकेट कि के माध्यम से स्ट्रीमिंग है के लिए लागू किया जाएगा एक नेटवर्कस्ट्रीम!

अग्रिम धन्यवाद, सराहना की।

उत्तर

2

NetworkStream कक्षा (see MSDN) में कोई घटना नहीं है। NetworkStreamStream से विरासत में है, इसलिए यह धारा मॉडल का पालन करता है, जो घटनाओं पर आधारित नहीं है। यदि आपको डेटा को अतुल्यकालिक रूप से प्राप्त करने की आवश्यकता है, तो BeginRead विधि

7

बस थॉमस के उत्तर को स्पष्ट करने के लिए, किसी भी व्यक्ति के लिए स्पष्टीकरण के साथ जो BeginRead विधि के साथ familliar नहीं है और आप इस प्रश्न का उत्तर समझना चाहते हैं, आप कॉल कर सकते हैं :

AsyncCallBack MyCallBack = new AsynCallBack(DataReceived); 
networkStream.BeginRead(buffer, offset, size, MyCallBack, MyObject); 

तो DataReceived समारोह बनाने के लिए:

private void DataReceived(IAsynResult result) 
    { 
    //call receive functionality 
    } 

यह DataReceived अत्यंत कैसे SerialPort.DataReceived घटना काम करता है के लिए इसी तरह कॉल करेंगे।

+5

यह इंगित करने योग्य है कि आपको अभी भी पढ़ने की प्रक्रिया को सही तरीके से पूरा करने और डेटा प्राप्त करने के लिए .ndRead विधि को कॉल करने की आवश्यकता है। – Andy