मैंने एक कस्टम WPF उपयोगकर्ता नियंत्रण बनाया है जिसका उद्देश्य किसी तृतीय पक्ष द्वारा उपयोग किया जाना है। मेरे नियंत्रण में एक निजी सदस्य है जो डिस्पोजेबल है, और मैं यह सुनिश्चित करना चाहता हूं कि युक्त विंडो/एप्लिकेशन बंद होने के बाद इसकी निपटान विधि हमेशा कॉल की जाएगी। हालांकि, UserControl डिस्पोजेबल नहीं है। मैंने आईडीस्पोजेबल इंटरफ़ेस को कार्यान्वित करने और अनलोड किए गए ईवेंट की सदस्यता लेने का प्रयास किया लेकिन मेजबान एप्लिकेशन बंद होने पर न तो कॉल किया गया। यदि संभव हो, तो मैं एक विशिष्ट निपटान विधि को कॉल करने के लिए याद रखने के अपने नियंत्रण के उपभोक्ताओं पर भरोसा नहीं करना चाहता हूं।डब्ल्यूपीएफ उपयोगकर्ता नियंत्रण का निपटान
public partial class MyWpfControl : UserControl
{
SomeDisposableObject x;
// where does this code go?
void Somewhere()
{
if (x != null)
{
x.Dispose();
x = null;
}
}
}
अब तक का एकमात्र समाधान डिस्पैचर के शट डाउनस्टार्ट ईवेंट की सदस्यता लेना है। क्या यह एक उचित दृष्टिकोण है?
this.Dispatcher.ShutdownStarted += Dispatcher_ShutdownStarted;
क्या उपयोगकर्ता नियंत्रण से उतार घटना के बारे में? – akjoshi
@akjoshi: एमएसडीएन का कहना है कि: अनलोडेड घटना बिल्कुल नहीं उठाई जा सकती है।और यह एक से अधिक बार ट्रिगर भी हो सकता है, वह तब होता है जब उपयोगकर्ता विषय बदलता है। – Dudu
जबकि आप अपने उपयोगकर्ता नियंत्रण पर आईडीस्पोजेबल इंटरफेस को कार्यान्वित कर सकते हैं, वहां कोई गारंटी नहीं है कि आपकी तीसरी पार्टी आपके निपटान पैटर्न कार्यान्वयन की निपटान विधि को कॉल करेगी। यदि आप मूल संसाधनों (जैसे एक फ़ाइल स्ट्रीम) पर हैं, तो आपको अंतिमकर्ता का उपयोग करने पर विचार करना चाहिए। – Philippe