मेरे पास एक सी # डेस्कटॉप एप्लिकेशन है जिसमें एक थ्रेड जो मैं लगातार बनाता हूं, एक स्रोत से एक छवि प्राप्त करता है (यह वास्तव में एक डिजिटल कैमरा है) और इसे पैनल (पैनल। छवि = img) जीयूआई मेंअमान्यऑपरेशन अपवाद - ऑब्जेक्ट वर्तमान में कहीं और उपयोग में है - लाल क्रॉस
(के रूप में यह एक नियंत्रण के कोड-पीछे है जो एक और धागा होना चाहिए।आवेदन काम करता है लेकिन कुछ मशीनों मैं यादृच्छिक समय अंतराल पर निम्न त्रुटि (अप्रत्याशित पाने पर)
************** Exception Text **************
System.InvalidOperationException: The object is currently in use elsewhere.
फिर पैनल लाल रेड, लाल एक्स में बदल जाता है - मुझे लगता है कि यह अमान्य चित्र आइकन है जो गुणों से संपादन योग्य है। आवेदक आयन काम करता रहता है लेकिन पैनल कभी अपडेट नहीं होता है।
जो मैं यह कह सकता हूं कि यह त्रुटि नियंत्रण की घटना से आता है जहां मैं तस्वीर पर कुछ और खींचता हूं।
if (this.ReceivedFrame != null)
{
Delegate[] clients = this.ReceivedFrame.GetInvocationList();
foreach (Delegate del in clients)
{
try
{
del.DynamicInvoke(new object[] { this,
new StreamEventArgs(frame)});
}
catch { }
}
}
इस प्रतिनिधि है:
मैं वहाँ एक ताला लेकिन कोई किस्मत :(
इस प्रकारतरह से मैं समारोह है कि पैनल पर छवि डालता फोन है उपयोग करने की कोशिश
public delegate void ReceivedFrameEventHandler(object sender, StreamEventArgs e);
public event ReceivedFrameEventHandler ReceivedFrame;
और यह कैसे नियंत्रण कोड-पीछे अंदर समारोह इसे करने के लिए पंजीकृत करता है:
Camera.ReceivedFrame +=
new Camera.ReceivedFrameEventHandler(camera_ReceivedFrame);
मैं भी कोशिश की
del.Method.Invoke(del.Target, new object[] { this, new StreamEventArgs(b) });
बजाय
del.DynamicInvoke(new object[] { this, new StreamEventArgs(frame) });
लेकिन कोई किस्मत
किसी को भी पता है कि कैसे मैं कम से कम इस त्रुटि को ठीक या त्रुटि किसी भी तरह पकड़ने और धागा बना सकता है एक बार फिर पैनल पर छवियों को डाल दिया?
मैं मुख्य थ्रेड में पैनल अपडेट कर रहा हूं लेकिन मैं उस फ़ंक्शन को कॉल कर रहा हूं जो इसे अन्य थ्रेड से अपडेट करता है और छवि को पैरामीटर के रूप में पास करता है। –
यदि आप उस फ़ंक्शन को कॉल करते हैं जो किसी अन्य थ्रेड से पैनल को अपडेट करता है और फ़ंक्शन में कोई संदर्भ स्विचिंग नहीं होता है (उदाहरण के लिए आवेषण का उपयोग करके मुख्य थ्रेड पर स्विच करें) इसका मतलब है कि आपका थ्रेड अन्य थ्रेड पर किया गया है, मुख्य थ्रेड –