का उचित सफाई मैं WPF के लिए अपेक्षाकृत नया हूं, और इसके साथ कुछ चीजें मेरे लिए काफी विदेशी हैं। एक के लिए, विंडोज फॉर्म के विपरीत, डब्ल्यूपीएफ नियंत्रण पदानुक्रम IDisposable का समर्थन नहीं करता है। विंडोज प्रपत्रों में, यदि कोई उपयोगकर्ता नियंत्रण किसी भी प्रबंधित संसाधन का उपयोग करता है, तो प्रत्येक नियंत्रण को लागू करने वाले निपटान विधि को ओवरराइड करके संसाधनों को साफ करना बहुत आसान था।WPF उपयोगकर्ता नियंत्रण
डब्ल्यूपीएफ में, कहानी इतना आसान नहीं है। मैंने कई घंटों तक इसकी खोज की है, और दो बुनियादी विषयों का सामना किया है:
पहला विषय माइक्रोसॉफ्ट स्पष्ट रूप से बता रहा है कि डब्ल्यूपीएफ आईडीआईएसओएसपीबल लागू नहीं करता है क्योंकि डब्ल्यूपीएफ नियंत्रणों में कोई अप्रबंधित संसाधन नहीं है। हालांकि यह सच हो सकता है, ऐसा लगता है कि वे इस तथ्य को पूरी तरह याद कर चुके हैं कि उनके डब्ल्यूपीएफ वर्ग पदानुक्रम में उपयोगकर्ता एक्सटेंशन वास्तव में प्रबंधित संसाधनों का उपयोग कर सकते हैं (सीधे या अप्रत्यक्ष रूप से मॉडल के माध्यम से)। आईडीस्पोजेबल को कार्यान्वित नहीं करके, माइक्रोसॉफ्ट ने प्रभावी रूप से केवल गारंटीकृत तंत्र को हटा दिया है जिसके द्वारा एक कस्टम WPF नियंत्रण या विंडो द्वारा उपयोग किए जाने वाले अप्रबंधित संसाधनों को साफ़ किया जा सकता है।
दूसरा, मुझे डिस्पैचर के कुछ संदर्भ मिले। ShutdownStarted। मैंने शट डाउनस्टार्ट ईवेंट का उपयोग करने की कोशिश की है, लेकिन यह हर नियंत्रण के लिए आग लगती नहीं है। मेरे पास WPF UserControl का एक गुच्छा है कि मैंने शट डाउनस्टार्ट के लिए एक हैंडलर लागू किया है, और इसे कभी भी कॉल नहीं किया जाता है। मुझे यकीन नहीं है कि यह केवल विंडोज़, या शायद डब्ल्यूपीएफ ऐप क्लास के लिए काम करता है। हालांकि यह ठीक से फायरिंग नहीं है, और जब भी ऐप बंद हो जाता है तो मैं खुले प्रदर्शन काउंटर ऑब्जेक्ट्स को लीक कर रहा हूं।
वहाँ Dispatcher.ShutdownStarted घटना से अप्रबंधित संसाधनों को साफ करने के लिए एक बेहतर विकल्प है? क्या IDISposable को लागू करने के लिए कुछ चाल है कि निपटान कहा जाएगा? यदि संभव हो तो मैं से फ़ाइनलइज़र का उपयोग करके अधिक पसंद करूंगा।
+1 कोडबेंड से बाहर डिस्पोजेबल संसाधनों को स्थानांतरित करने के लिए +1। डब्ल्यूपीएफ के लिए प्रमुख सीखने के बिंदुओं में से एक डेटाबेसबेस आर्किटेक्चर की ताकत और अभिव्यक्ति का लाभ उठाने के लिए कोडबेइंड को कम कर रहा है। यह सीखने के लिए एक दर्दनाक बात है (सीखने की अवस्था एक चट्टान पर चढ़ने की तरह अधिक है), लेकिन जब आप विचार के डब्ल्यूपीएफ मोड को "प्राप्त" करते हैं तो पुरस्कृत होता है। –
सभी डिस्पोजेबल संसाधन वास्तव में व्यूमोडेल में हैं, जो स्वयं ही पहचान योग्य हैं। मैं वास्तव में उलझन में हूं कि डिस्पैचर.शूटडाउनस्टार्ट घटना क्यों फायरिंग नहीं कर रही है। प्रदर्शन काउंटर कंट्रोल (और इसके संबंधित व्यूमोडेल) वास्तव में डब्ल्यूपीएफ ग्राफ से जुड़े हुए हैं क्योंकि यह में में एम्बेडेड है। –
jrista
@ ग्रेग डी: मुझे आमतौर पर डब्ल्यूपीएफ मॉडल मिलता है। जैसे ही मैंने डब्ल्यूपीएफ की मूलभूत बातें हासिल की थी, मैंने एमवीवीएम का उपयोग करना शुरू कर दिया था, और मेरा कोडबिहेंड उतना ही उतना ही बेकार है जितना इसे प्राप्त होता है (बस डिफ़ॉल्ट कन्स्ट्रक्टर और इसके कॉल को प्रारंभिक कॉम्पोनेंट)। डब्ल्यूपीएफ की कंपोज़ेबिलिटी और डाटाबेसिंग क्षमताओं आश्चर्यजनक से परे हैं, और यदि मेरे पास विकल्प है तो मैं कभी भी विंडोज फॉर्म पर वापस नहीं जाऊंगा। – jrista