मैं बहु-थ्रेडिंग के साथ कुछ हद तक परिचित हूं जिसमें मैंने इसके बारे में पढ़ा है लेकिन अभ्यास में इसका कभी भी उपयोग नहीं किया है।सी # मल्टीथ्रेडिंग - बिना किसी नियंत्रण के आमंत्रित करें
मेरे पास एक प्रोजेक्ट है जो किसी तृतीय पक्ष लाइब्रेरी का उपयोग करता है जो ईवेंट को बढ़ाकर इनपुट डिवाइस की स्थिति साझा करता है। समस्या यह है कि जिस तरह से पुस्तकालय लिखा जाता है, इन घटनाओं को एक अलग धागे से उठाया जाता है।
मेरे आवेदन को बहु-थ्रेडेड होने की आवश्यकता नहीं है और मैंने कई क्लासिक थ्रेडिंग मुद्दों (यूआई नियंत्रणों को एक अलग थ्रेड से बातचीत करने के बारे में शिकायत करने के बारे में शिकायत की है, संग्रह जो कोड के एक टुकड़े के रूप में संशोधित होते हैं, पुनरावृत्त हो रहा है इसके ऊपर, आदि)।
मैं सिर्फ तीसरे पक्ष की लाइब्रेरी की घटना को अपने यूआई थ्रेड पर वापस देना चाहता हूं। विशेष रूप से मुझे लगता है कि क्या होना चाहिए:
मेरी कक्षा को ईवेंट प्राप्त होता है और यूआईएल की तुलना में हैंडलर एक अलग थ्रेड पर चल रहा है। मैं इस शर्त का पता लगाना चाहता हूं (जैसे InvokeRequired), और उसके बाद UI थ्रेड पर नियंत्रण देने के लिए BeginInvoke के बराबर प्रदर्शन करें। फिर कक्षा पदानुक्रम पर उचित अधिसूचनाएं भेजी जा सकती हैं और मेरा सभी डेटा केवल एक धागे से छूता है।
समस्या यह है कि, इन इनपुट घटनाओं को प्राप्त करने वाली कक्षा नियंत्रण से नहीं ली गई है और इसलिए InvokeRequired या BeginInvoke नहीं है। इसका कारण यह है कि मैंने यूआई और अंतर्निहित तर्क को साफ करने की कोशिश की। कक्षा अभी भी यूआई थ्रेड पर चल रही है, इसमें कक्षा के अंदर कोई यूआई नहीं है।
अभी मैं उस अलगाव को बर्बाद कर इस मुद्दे को ठीक कर चुका हूं। मैं उस नियंत्रण के संदर्भ में जाता हूं जो मेरी कक्षा से डेटा प्रदर्शित करेगा और का उपयोग करके विधियों को आमंत्रित करेगा। ऐसा लगता है कि यह उन्हें अलग करने के पूरे उद्देश्य को हरा देता है क्योंकि अब अंतर्निहित वर्ग की मेरी विशिष्ट यूआई कक्षा पर प्रत्यक्ष निर्भरता है।
शायद कन्स्ट्रक्टर चलाने वाले थ्रेड के संदर्भ को सहेजने का कोई तरीका है और फिर थ्रेडिंग नेमस्पेस में कुछ ऐसा है जो Invoke कमांड करेगा?
क्या इसके आसपास कोई रास्ता है? क्या मेरा दृष्टिकोण पूरी तरह से गलत है?
मुझे यह समझने में थोड़ी देर लग गई कि प्रतिनिधियों का उपयोग कैसे किया जाता है लेकिन यह काम करता है! – colithium