2009-08-30 12 views
6

पर बनाए गए धागे के अलावा किसी थ्रेड से नियंत्रित नियंत्रण मैं एक फाइलवॉचर विंडोज एप्लिकेशन लिख रहा हूं जो एक निर्दिष्ट फ़ोल्डर में परिवर्तनों की तलाश करेगा और फिर विवरण को एक txt फ़ाइल में लॉग करेगा।क्रॉस-थ्रेड ऑपरेशन मान्य नहीं है:

मैं जब मैं अपने आवेदन से F5 मारा वास्तव में क्या नीचे http://www.codeproject.com/KB/dotnet/folderwatcher.aspx

इस लेख में बताया गया है और फिर बना सकते हैं या फ़ोल्डर है कि देखा जा रहा है यह नीचे वर्णित त्रुटि फेंकता में एक फ़ाइल को संशोधित पीछा किया।

कृपया मदद

पार धागा आपरेशन मान्य नहीं: नियंत्रण 'txtFolderActivity' धागा उस पर बनाया गया था के अलावा किसी अन्य धागे से पहुँचा।

उत्तर

9

आपको फॉर्म पर Invoke विधि का उपयोग करना होगा उदा। घटना के प्रति प्रतिक्रिया में बदलाव करने के लिए एक अज्ञात प्रतिनिधि के साथ।

ईवेंट हैंडलर को एक और थ्रेड के साथ उठाया गया है। यह दूसरा धागा आपके फॉर्म में नियंत्रण तक नहीं पहुंच सकता है। इसे थ्रेड को उन सभी नियंत्रण कार्यों को करने के लिए "आमंत्रित करना" है जो प्रारंभ में उन्हें बनाए गए थे।

बजाय

:

myForm.Invoke(new Action(
delegate() 
{ 
    myForm.Control1.Text = "newText"; 
})); 
+0

+1 - मैं, इस समस्या को हल करने के लिए अपने तरीके से प्रयास करने की आवश्यकता के रूप में यह मेरे वर्तमान दृष्टिकोण की तुलना में काफी आसान है। –

+0

+1 बहुत बहुत धन्यवाद @ मिस्चा। यह मेरा काम बहुत आसान बना दिया। :) – IsmailS

3

आप एक गैर यूआई धागे से यूआई अद्यतन करने के लिए कोशिश कर रहे हैं:

myForm.Control1.Text = "newText"; 

आप लिखने के लिए की है। यूआई में थ्रेड एफ़िनिटी है और इसे केवल उस थ्रेड से अपडेट किया जा सकता है जिसने इसे बनाया है। यदि आप WinForms का उपयोग कर रहे हैं, तो How to: make thread-safe calls to Windows Forms Controls एमएसडीएन आलेख देखें। असल में आपको यूआई को Control.Invoke विधि के माध्यम से अपडेट करने की आवश्यकता होगी। WPF के लिए, आपको DispatcherObject का उपयोग करने की आवश्यकता है।

1

असल में आपके आवेदन में दो धागे होना चाहिए, कम से कम, और आपके नियंत्रण तर्क पर धागा अलग है, इसलिए आपको यह त्रुटि मिलती है, क्योंकि नियंत्रण थ्रेडसेफ नहीं होते हैं।

यह आपको उन समस्याओं से बचाने के लिए है जो एक ही समय में एक ही नियंत्रण को बदलने वाले कई धागे के कारण हो सकते हैं।

आप यहाँ देख कर काफी अधिक विस्तार पा सकते हैं: http://msdn.microsoft.com/en-us/library/ms171728%28VS.80%29.aspx

संबंधित मुद्दे