मुझे पता है कि अगर मैं एक अलग थ्रेड से नियंत्रण में संशोधन कर रहा हूं, तो मुझे ध्यान रखना चाहिए क्योंकि WinForms और WPF नियंत्रण के राज्य को अन्य धागे से संशोधित करने की अनुमति नहीं देते हैं।केवल UI थ्रेड को यूआई को संशोधित करने की अनुमति क्यों है?
यह प्रतिबंध क्यों है?
यदि मैं थ्रेड-सुरक्षित कोड लिख सकता हूं, तो मुझे नियंत्रण स्थिति को सुरक्षित रूप से संशोधित करने में सक्षम होना चाहिए। तो यह प्रतिबंध क्यों मौजूद है?
मेरा मानना है कि इस प्रतिबंध में मौजूद कारणों में से एक कारण यह है कि विंडोज संदेश लूप को सुनने के लिए हमेशा एक और थ्रेड से कम गारंटी नहीं है। –
@Tim: यह सही नहीं है, एकाधिक UI थ्रेड मौजूद हो सकते हैं, प्रत्येक के अपने संदेश लूप के साथ। उदाहरण के लिए, प्रगति पट्टी संवाद प्रदर्शित करने के लिए यह दूसरे थ्रेड को स्पिन करने की अनुमति है। –
@बेन: इस पोस्ट को सी # के साथ टैग किया गया है। एक नेट अनुप्रयोग में, आपको ड्राइंग से संबंधित काम (या जोखिमपूर्ण व्यवहार या अपवाद जोखिम) करने के लिए हमेशा जीयूआई थ्रेड पर मार्शल नियंत्रण करना होगा। बेशक, यह आपको पृष्ठभूमि के काम करने के लिए किसी भी धागे को फैलाने से रोकता नहीं है। आने वाले वास्तविक Win32 संदेशों को सुनने के संबंध में, मुझे ऐसा करने का एकमात्र तरीका है (बाहरी कॉल के अलावा) "सुरक्षित ओवरराइड शून्य WNDProc (रेफ संदेश एम)" के साथ है। सिद्धांत रूप में, इस विधि को पारित संदेश ले सकते हैं और किसी भी धागे पर उनका उपयोग कर सकते हैं। –