मैं NetworkStream.ReadAsync उपयोग करने के लिए() डेटा पढ़ने की कोशिश कर रहा हूँ बंद किए बिना NetworkStream.ReadAsync रद्द करने के लिए, लेकिन मैं ReadAsync() एक बार कहा जाता है बंद करने का तरीका नहीं मिल रही है। पृष्ठभूमि के लिए, नेटवर्कस्ट्रीम मुझे एक कनेक्टेड ब्लूटूथ क्लाइंट ऑब्जेक्ट (32Feet.NET ब्लूटूथ लाइब्रेरी से) द्वारा प्रदान किया जाता है।कैसे धारा
वर्तमान get-यह काम कोड मैं कोशिश कर रहा हूँ के नीचे है।
int bytesRead;
while (this.continueReading)
{
bytesRead = await this.stream.ReadAsync(this.buffer, 0, (int)this.buffer.Length);
Console.WriteLine("Received {0} bytes", bytesRead);
}
Console.WriteLine("Receive loop has ended");
कोड ठीक प्राप्त डेटा काम करता है, और continueReading ध्वज गलत पर सेट है और डेटा प्राप्त होता है पाशन बंद हो जाएगा, लेकिन डेटा प्राप्त होने तक यह अतीत ReadAsync() लाइन आगे बढ़ना नहीं होंगे। मैं नहीं देख सकता कि डेटा प्राप्त किए बिना कॉल को कैसे रद्द किया जाए।
मुझे पता है ReadAsync की एक अधिभार जो एक CancellationToken प्रदान करता है कि वहाँ हूँ, लेकिन ऐसा लगता है कि के रूप में NetworkStream डिफ़ॉल्ट ReadAsync व्यवहार पर हावी नहीं होता, टोकन नजरअंदाज कर दिया है (NetworkStream.ReadAsync with a cancellation token never cancels देखें)।
मैं अंतर्निहित धारा को बंद करने की कोशिश की है, और इस ObjectDisposedException फेंकने के लिए इंतजार कर रहे ReadAsync कॉल का कारण बनता है, और अंतर्निहित ब्लूटूथ कनेक्शन भी बंद कर दिया जाता है। आदर्श रूप से मैं सिर्फ पढ़ने के लिए डिवाइस के साथ कनेक्शन को पूरी तरह से अलग नहीं करना चाहता हूं। यह ऐसा करने का एक साफ तरीका प्रतीत नहीं होता है, और पूरी तरह से va ReadAsync() कॉल को बाधित करने के लिए पूरी स्ट्रीम को फाड़ने के लिए अनावश्यक लगता है।
कोई सलाह?
मैं DataAvailable जाँच के बारे में भूल गया था! नमूना कोड और स्टीफन टब के लेख के लिंक के लिए धन्यवाद। दोनों मेरे लिए यह हासिल करने में सहायक होंगे कि मैं बाद में हूं। धन्यवाद! – Swampie