मैं कैसे जांच सकता हूं कि वर्तमान चल रहा थ्रेड जीयूआई संदर्भ पर है या नहीं?जांचें कि क्या थूई गुई संदर्भ पर है
उत्तर
दुर्भाग्य से 100% सटीकता के साथ इस प्रश्न का उत्तर देना मुश्किल है क्योंकि यह हमेशा पूरी तरह से स्पष्ट नहीं है कि जीयूआई संदर्भ क्या है। यह हां/नहीं उत्तर से एक ह्युरिस्टिक है। और हर जीआईआई ढांचे के लिए ह्युरिस्टिक अलग होगा।
WPF के लिए एक अच्छा एक मौजूदा धागा
public static bool IsWpfGuiThread() {
return Dispatcher.FromThread(Thread.CurrentThread) != null;
}
हालांकि इस के लिए जाँच करें और अगर वहाँ देखने के लिए एक सक्रिय Dispatcher
के रूप में सिर्फ एक यादृच्छिक धागे पर एक Dispatcher
की स्थापना, लेकिन वास्तव में डाल नहीं द्वारा मूर्ख बनाया जा सकता है इसके ऊपर एक जीयूआई।
WinForms के लिए जांच करने के लिए एक अच्छा एक वर्तमान SynchronizationContext
है।
public static bool IsWinFormsGuiThread() {
return SynchronizationContext.Current is WindowsFormsSynchronizationContext;
}
हालांकि इस किसी के द्वारा अस्थायी रूप से (या लंबे समय तक) मूर्ख बनाया जा सकता है एक और तुल्यकालन संदर्भ के लिए Current
मूल्य को रीसेट। यह अनिवार्य रूप से सिर्फ एक वैश्विक धागा है और किसी के द्वारा सेट किया जा सकता है। विजुअल स्टूडियो जैसे कुछ अनुप्रयोगों में इसे बदलने के लिए वास्तव में काफी आम है (लेकिन यह एक WPF ऐप है)
मुझे लगता है कि आप Dispatcher
ऑब्जेक्ट चाहते हैं। देखें http://social.msdn.microsoft.com/forums/en-US/wpf/thread/360540eb-d756-4434-86f9-a3449f05eb55
क्या आप पूछ रहे हैं कि आपके पास ज्ञात गुई ऑब्जेक्ट है या नहीं, यह देखने के लिए कि क्या आप उचित संदर्भ में हैं या नहीं वह वस्तु? मुझे लगता है कि guiObject.VerifyAccess()
इसके लिए काम करेगा।
- 1. जांचें कि क्या पाइथन
- 2. जांचें कि क्या Guava
- 3. जांचें कि क्या सी #
- 4. जांचें कि क्या लिनक्स
- 5. जांचें कि क्या स्ट्रिंग
- 6. जांचें कि क्या एनएचबीरनेट
- 7. जांचें कि क्या MySQL
- 8. जांचें कि क्या हैशबल
- 9. जांचें कि क्या एन्कोडिंग
- 10. जांचें कि क्या रूबी
- 11. जांचें कि क्या डेटाबेस सेल खाली है
- 12. जांचें कि पथ नेटवर्क पर है
- 13. PHP: जांचें कि ऑब्जेक्ट/सरणी एक संदर्भ है
- 14. बिटवाइज जांचें कि क्या ध्वज मौजूद है
- 15. पोस्टग्रेस्क्ल: जांचें कि क्या स्कीमा मौजूद है?
- 16. जांचें कि क्या फ़ंक्शन में सजावट है
- 17. जांचें कि क्या स्काइप स्थापित है
- 18. जांचें कि क्या रजिस्ट्री कुंजी मौजूद है
- 19. जांचें कि क्या mmap'ed पता सही है
- 20. जांचें कि क्या CoreData विशेषता खाली है
- 21. जांचें कि क्या पाइथन पैकेज स्थापित है
- 22. जांचें कि क्या सत्र मौजूद है JSF
- 23. जांचें कि क्या NSNumber खाली है
- 24. जांचें कि क्या jplayer खेल रहा है
- 25. जांचें कि क्या एंड्रॉइड मार्केट
- 26. जांचें कि क्या इसके यूआरएल
- 27. जांचें कि क्या NSNumber अंश है
- 28. जांचें कि क्या NSURL स्थानीय फ़ाइल है
- 29. जांचें कि क्या BigDecimal पूर्णांक मान है
- 30. जांचें कि क्या लेयर फ्लैग सेट है
मुझे पता है कि यह एक पुराना उत्तर है, लेकिन ... डब्ल्यूपीएफ ऐप में कई यूआई थ्रेड हो सकते हैं, [डिस्पैचर.फ्रेम थ्रेड()] (https: // msdn का उपयोग कर मौजूदा थ्रेड पर सक्रिय प्रेषक की जांच कर रहे हैं। microsoft.com/en-us/library/system.windows.threading.dispatcher.fromthread(v=vs.110).aspx) एक अच्छा संकेतक नहीं है कि यह एक (या "the") UI थ्रेड है। इसे संभालने के सर्वोत्तम तरीकों में से एक है थ्रेड के सिंक्रनाइज़ेशन कॉन्टेक्स्ट का ट्रैक रखना जो लंबे समय तक चलने वाला या पृष्ठभूमि थ्रेड शुरू करता है, यह वह जगह है जहां async/await सहायक हो सकता है (यह नहीं कि जब यह उत्तर पहली बार लिखा गया था तब वे अस्तित्व में थे)। – slugster