तर्क के लिए, यूआई थ्रेड को उस धागे के रूप में मानें जिस पर Application.Run()
पर कॉल किया गया है या इसमें से एक के ओवरलोड को कॉल किया गया है और इसमें सक्रिय संदेश लूप चल रहा है।यह पता लगाने के लिए कि क्या हम यूआई थ्रेड पर हैं?
क्या यह पता लगाने का कोई तरीका है कि क्या हम वर्तमान में ऐसे धागे पर निष्पादित कर रहे हैं?
कारण मुझे यह चाहिए क्योंकि मेरे पास एक निजी समारोह वाला वर्ग है जो लंबे समय से चल रहा है। कक्षा स्वयं पहले से ही बहुप्रचारित है, और इस वर्ग का उपयोग ऐसा है कि इसका उपयोग यूआई या प्रसंस्करण करने वाले पृष्ठभूमि धागे से किया जा सकता है। यह कार्य भी इस नेट में पड़ता है। लेकिन मैं नहीं चाहता कि यह यूआई थ्रेड को अवरुद्ध करे। इसलिए मैं यह जानना चाहता हूं कि मैं यूआई थ्रेड पर चल रहा हूं और यदि ऐसा है, तो फ़ंक्शन फ़ंक्शन को पृष्ठभूमि थ्रेड में कॉल करें (शायद ThreadPool
, लेकिन यह इस चर्चा के लिए एक गैर-समस्या है)। यह पूरी तरह से व्यवहार किया जाता है, लेकिन पृष्ठभूमि धागे शायद फ़ंक्शन के आउटपुट पर निर्भर हैं, इसलिए उनके लिए अवरुद्ध करना बेहतर है, जबकि यूआई थ्रेड इसे "सेट-एंड-भूल" तरीके से एक्सेस कर रहा है।
स्टार्टअपथ्रेड जरूरी नहीं है कि जीयूआई थ्रेड, या केवल जीयूआई थ्रेड हो। –
WRONG: InvokeRequired रिटर्न सही है अगर "नियंत्रण पर बनाया गया था उससे अलग धागा" –
@ रिको: हां, ज़ाहिर है। मुझे विश्वास नहीं है कि टाइपो पिछले तीन सालों से वहां बैठा है और कोई भी ध्यान नहीं दे रहा है। इसे पकड़ने के लिए धन्यवाद, मैंने तदनुसार जवाब अपडेट किया। –