सी # नेट 4.5 धागे के बीच संचार

मैं एक एप्लीकेशन बना रहा हूं जहां वास्तविक समय में कुछ एमसीयू हार्डवेयर (सेंसर रीडिंग इत्यादि) की निगरानी करना संभव है। संचार के लिए मैं एक बस बस का उपयोग कर रहा हूँ।

असल में मेरे पास 2 धागे हैं। एक मुख्य धागा है जहां जीयूआई चल रहा है और दूसरा डिवाइस के बीच संचार का प्रबंधन/निगरानी कर रहा है। तो स्पष्ट बात यह है कि मुझे संचार धागे से डेटा को गुई थ्रेड तक पास करने की आवश्यकता है। हालांकि इसे करने का सही तरीका क्या होना चाहिए? मुझे पता है कि जब बच्चे थ्रेड काम खत्म कर चुका है तो कॉलिंग थ्रेड पर डेटा कैसे पास किया जाए, लेकिन इस मामले में संचार थ्रेड हर समय चल रहा है।

बेशक संचार तर्क एक अलग वर्ग (CANManager) द्वारा प्रतिनिधित्व किया जाता है।

मेरे पास अपने स्वयं के कुछ विचार हैं, हालांकि मैं जानना चाहता हूं कि "सही" तरीका यह कैसे किया जाना चाहिए।

अग्रिम में धन्यवाद :)

2
मेरा प्रारंभिक विचार सिर्फ "स्टोरेज क्लास" बनाने के लिए था जो गुणों के रूप में सभी आवश्यक मान रखेगा। इसलिए मैं उन गुणों को अपने संचार धागे से असंकालिक रूप से अद्यतन कर सकता हूं और फिर उन गुणों को केवल wpf पर बांध सकता हूं। :)
जोड़ा लेखक xnonamex, स्रोत
हो सकता है। जैसा कि आपने अनुमान लगाया है कि मैं ओओपी और सी # में विशेषज्ञ नहीं हूं, क्योंकि मेरी प्राथमिक चीज एम्बेडेड सी है। लेकिन क्या यह एक बात हो सकती है? अगर यह काम करता है तो यह सबसे साधारण बात लगता है?
जोड़ा लेखक xnonamex, स्रोत
क्या आपका मतलब 'व्यूमोडेल' है? :)
जोड़ा लेखक Dr. ABT, स्रोत
हालांकि इसे करने का सही तरीका क्या होना चाहिए? google.com.au/search?q=wpf+invoke+on+main+thread
जोड़ा लेखक ta.speot.is, स्रोत
BackgroundWorker क्लास पर एक नज़र डालें, जहां आप 'प्रोग्रेस चेंजेड' ईवेंट का उपयोग कर सकते हैं: msdn.microsoft.com/en-us/library/… | चूंकि आप .NET 4.5 का उपयोग कर रहे हैं, आप कार्य वर्ग का भी उपयोग कर सकते हैं, जो आपको उसी प्रक्रिया के साथ जारी रखने देता है, जैसे ही आपकी बाल प्रक्रिया समाप्त हो जाती है: msdn.mi
जोड़ा लेखक Kai Hartmann, स्रोत

1 उत्तर

आम तौर पर किसी भी प्रोग्रामिंग भाषा में आपको थ्रेड में संचार करने के लिए एक पब-उप आर्किटेक्चर पर विचार करने की आवश्यकता होती है। इसका मतलब यह है कि प्रत्येक थ्रेड ए के लिए जो थ्रेड बी को संदेश भेजना चाहता है, आपको उस धागे से 'संदेश' या घटना को एक कतार पर पोस्ट करना चाहिए, जब यह मुफ़्त होता है तो किसी अन्य थ्रेड द्वारा खपत किया जाता है। यदि आप बस ' क्रॉस थ्रेड संचार C# ' पर क्लिक करेंगे पढ़ने के लिए कई लेख मिलते हैं।

विशेष रूप से, .NET में किसी अन्य विधि (किसी भी) थ्रेड पर किसी विधि या प्रतिनिधि को आमंत्रित करने का तरीका SynchronizationContext । यह विंडोज फॉर्म और डब्ल्यूपीएफ दोनों के लिए आम है, जबकि डब्ल्यूपीएफ में एक डिस्पैचर है जो इस ढांचे के लिए केवल यूआई थ्रेड पर आक्रमण करने के लिए अलग है।

इस तरह की तकनीक करने के लिए उपलब्ध कई ढांचे, पुस्तकालय, पैटर्न हैं। उनमें से एक कार्य समांतर लाइब्रेरी । टीपीएल आपको एक कार्य, या कार्य बनाने की अनुमति देता है और इसे थ्रेडपूल, यूआई, समान या विशिष्ट थ्रेड पर आमंत्रित करता है। टीपीएल शेड्यूलर । आप अंतर्निहित शेड्यूलर का उपयोग कर सकते हैं या अपना स्वयं का बना सकते हैं। शेड्यूलर थ्रेड मार्शलिंग करने के लिए अपने दिल पर सिंक्रनाइज़ेशन कॉन्टेक्स्ट का उपयोग करते हैं।

टीपीएल का एक विशेष रूप से दिलचस्प पैटर्न एक धागे पर एक प्रतिनिधि चलाने की क्षमता है और फिर अन्य धागे पर कई संचालन श्रृंखला, उदाहरण के लिए पूरा होने या त्रुटि पर। मैं कार्य असीमित पैटर्न और async विधियों से कार्य लौटने पर विचार करें ताकि आप ContinueWith का उपयोग कर उन पर श्रृंखला

3
जोड़ा