मैंने इस विशिष्ट अपवाद का उल्लेख करने वाले विभिन्न प्रश्नों को देखा है (this question lists many of them, जिसे मैंने देखा है)। इसके अलावा, मेरे पास general question as this post है, लेकिन एक अलग संदर्भ में, इसलिए the answer मेरे लिए सहायक नहीं है।अमान्य कॉमऑब्जेक्ट एक्सेप्शन का क्या कारण बनता है: "COM ऑब्जेक्ट जिसे इसके अंतर्निहित आरसीडब्ल्यू से अलग किया गया है, का उपयोग नहीं किया जा सकता है।"
संदर्भ
मैं एक वर्ग AxWindowsMediaPlayer
कि एक वर्ग, View
कहा जाता है जो एक Panel
के भीतर है के स्वामित्व में है से ली गई है, एक Workspace
भीतर है। मैंने हाल ही में इस स्थिति के आसपास a question से पूछा, लेकिन उस प्रश्न को निर्देश दिया गया था कि के लिए मेरा कामकाज यह समस्या ठीक है। उस सवाल से पृष्ठभूमि यहाँ प्रासंगिक है:
.-----------------------. |Workspace | |.--------. .--------. | ||Panel1 | |Panel2 | | ||.-----. | |.-----. | | |||View1| | ||View2| | | ||'-----' | |'-----' | | |'--------' '--------' | '-----------------------'
जब एक View
निपटारा हो जाता है, एक विधि कहा जाता Synchronize()
शेष View
वस्तुओं के सभी पर बुलाया जाएगा। View
के लिए जिसमें AxWindowsMediaPlayer
है, यह videoPlayer.Error.clearErrorQueue()
पर कॉल करता है।
समस्या
जब मैं शीर्ष स्तर (Workspace.Dispose()
) पर Dispose()
कहते हैं, अगर एक और View
निपटारा हो जाता है और उसके बाद का कारण बनता है Synchronize()
शेष View
वस्तुओं पर कहा जाता था, View
AxWindowsMediaPlayer
क्लास वाली एक फेंकता videoPlayer.Error.clearErrorQueue()
लाइन पर अपवाद करते हुए कहा:
InvalidComObjectException: COM उद्देश्य यह है कि उसके अंतर्निहित RCW से अलग किया गया ख नहीं कर सकते ई इस्तेमाल किया।
मैं कैसे AxWindowsMediaPlayer
उसके अंतर्निहित RCW (Runtime Callable Wrapper) से अलग हो रही है द्वारा हैरान हूँ। मैंने this article that talks about this exception पढ़ा है और Marshal.ReleaseComObject()
पर कॉल करने के खतरे हैं। मैं इस विधि को स्पष्ट रूप से नहीं बुला रहा हूं। मैं Panel
और View
और VideoPlayerControl
वर्गों (AxWindowsMediaPlayer
से निकला है), लेकिन उन में से कोई भी हिट हो इससे पहले कि अपवाद होता है की Dispose
तरीकों पर breakpoints डाल दिया है।
मेरा कामकाज यह सुनिश्चित करना है कि मीडिया प्लेयर के साथ View
हमेशा पहले निपटान हो जाए। यह मेरे पिछले प्रश्न के पीछे प्रेरणा थी। लेकिन मैं यह समझना चाहता हूं कि यह कैसे हो रहा है, इसलिए मैं देख सकता हूं कि यह कुछ ऐसा है जिसे मुझे ठीक करने की ज़रूरत है। से पहले अपने आरसीडब्ल्यू से अलग होने के लिए AxWindowsMediaPlayer
को कौन से कारण से वंचित किया जा रहा है?
मेरा अनुमान है कि AxWindowsMediaPlayer
अंतिमकर्ता जीसी द्वारा बुलाया जा रहा है, लेकिन मुझे समझ में नहीं आता कि यह क्या चल रहा है। किसी कारण से, उच्च स्तर पर Dispose
पर कॉल करने से फर्श के नीचे कॉल करने के लिए Marshal.ReleaseComObject
हो रहा है। क्या कोई मुझे प्रबुद्ध कर सकता है?