.net - WPF DocumentViewer XPS फ़ाइल को रिलीज़ नहीं करता है




(4)

मैं एक WPF अनुप्रयोग पर काम कर रहा हूं जो एक्सपीएस दस्तावेजों को खोलता है और दिखाता है। जब अनुप्रयोग बंद हो जाता है, तो विनिर्देश यह है कि एप्लिकेशन को साफ करने के लिए खोली गई एक्सपीएस दस्तावेज़ को हटा देना चाहिए। हालांकि, जब एक निश्चित XPS दस्तावेज़ खोलते हैं, तो एप्लिकेशन एक अपवाद फेंकता है कि यह फाइल तब भी उपयोग में है जब इसे हटाने का प्रयास होता है यह थोड़ा अजीब है क्योंकि यह केवल तभी होता है जब एक विशेष XPS दस्तावेज़ खोलते हैं और केवल जब आप पहले पृष्ठ से आगे बढ़ते हैं

मेरे द्वारा उपयोग किए गए कुछ कोड नीचे दिखाए गए हैं:

XPS दस्तावेज़ खोलने के लिए:

DocumentViewer m_documentViewer = new DocumentViewer();
XpsDocument m_xpsDocument = new XpsDocument(xpsfilename, fileaccess);
m_documentViewer.Document = m_xpsDocument.GetFixedDocumentSequence();
m_xpsDocument.Close();

XPS दस्तावेज़ को नेविगेट करने के लिए:

m_documentViewer.FirstPage();
m_documentViewer.LastPage();
m_documentViewer.PreviousPage();
m_documentViewer.NextPage();

DocumentViewer ऑब्जेक्ट को बंद करने और फ़ाइल को हटाने के लिए:

m_documentViewer.Document = null;
m_documentViewer = null;
File.Delete(xpsfilename);

यह सब बहुत ही बुनियादी है और यह अन्य दस्तावेजों के साथ काम करता है, जिन्हें हमने परीक्षण किया था। लेकिन विशेष XPS दस्तावेज़ के साथ, एक अपवाद यह कहता है कि फ़ाइल को हटाया जाना अभी भी उपयोग किया जा रहा है

क्या कुछ गलत है या मेरे कोड से गायब है?

धन्यवाद!


http://blogs.msdn.com/junfeng/archive/2008/04/21/use-htrace-to-debug-handle-leak.aspx

आप यह पता लगा सकते हैं कि WinDbg का उपयोग करने वाले हैंडल और अप्रबंधित स्टैक कौन रखता है

संपादित करें: और ज़ाहिर है, आप एसओएस विस्तार के माध्यम से प्रबंधित स्टैक ट्रेस और प्रहार भी कर सकते हैं ( http://msdn.microsoft.com/en-us/library/bb190764.aspx )


उत्तर के लिए धन्यवाद!

यह थोड़ा कम स्तर है, लेकिन जब मैं विचारों से बाहर निकलता हूं, तब भी मैं इसे ध्यान में रखूंगा वैसे भी, मैं बग के बारे में थोड़ी अधिक पता चला। विशेष दस्तावेज जो अपवाद का कारण बनता है उसमें छवियों को डाला गया है। जब मैं छवियों को निकालता हूं, तो अपवाद ऐसा नहीं होता है। यह हो सकता है कि एक DocumentViewer बग हो, लेकिन मैं अभी भी कोशिश कर रहा हूँ ...


नहीं, अभी तक अब तक कुछ नहीं।

सिर्फ गणना करने के लिए, मैंने निम्न विधियों को विफल करने की कोशिश की है:

  1. फ़ाइल को हटाने से पहले विंडो के "बंद" ईवेंट में सभी को रिक्त करने के लिए सेट करें। इसमें DocumentViewer.Document गुण और DocumentViewer ऑब्जेक्ट शामिल हैं।

  2. विंडो को खोलने के लिए प्रयुक्त ShowDialog () और बाद में इसे रिक्त करने के लिए सेट करें। फ़ाइल की "विजिट" घटना के लिए फ़ाइल को हटाने का प्रयास किया.विंडो। एप्लिकेशन ऑब्जेक्ट जो विंडो खोल रहा है फिर भी इस अपवाद को फेंकता है कि फ़ाइल का उपयोग किया जा रहा है।

दस्तावेज़व्यूअर बग ???


मुझे संदेह है कि आप उसी मुद्दे पर http://www.devnewsgroups.net/group/microsoft.public.dotnet.framework/topic59281.aspx पर चल रहे हैं

दस्तावेज़व्यूअर में एक बग की तरह लगता है कि इसे नेस्टेड बिटमैपडिकोडर्स का निपटान होनी चाहिए या छवि को एक अलग बिटमैप कैशिंग विकल्प के साथ लोड किया हो।