c# - UI stuck until background process has completed -
इस सवाल का पहले से ही एक उत्तर है: < / P>
- 1 उत्तर
मेरे पास एक
.cab निष्कर्षण उपयोगिता मेरी मुख्य विंडो में, मैं
.cab का नाम निकालना चाहता हूं, जो फ़ाइल को अभी निकाला जा रहा है, और निष्कर्षण का प्रतिशत किया गया है।
मैंने गुण लिखा है प्रत्येक फ़ील्ड अर्थात्
फ़ाइल नाम ,
प्रतिशत , आदि ... जो मेरे
ViewModel पर हैं।
सभी काम कर रहे हैं ठीक है लेकिन यह यूआई
MainVindowViewModel :
सार्वजनिक स्ट्रिंग FileExtract {get_fileExtract; } सेट {_fileExtract = value; NotifyPropertyChanged ( "FileExtract"); }} सार्वजनिक int प्रतिशत {प्राप्त {वापसी _परेंट; } सेट {_percent = value; NotifyPropertyChanged ( "प्रतिशत"); }}
निकासी के लिए विधि
निजी शून्य एक्स्ट्रेकैब (स्ट्रिंग आउटपुट डायरेक्टरी) {m_CabinetFile.FileExtractBefore + = नए इवेंटहाँडलर (कैबिनेटफ़ाइल_फाइलएक्सट्रैक); M_CabinetFile.FileExtractComplete + = नए इवेंटहाँडलर (कैबिनेटफ़ाइल_फाइलएक्सटेक्चर); }
उपरोक्त दो घटनाओं से पहले और बाद में फ़ाइल को निकाला जाता है।
निम्नलिखित विधियों के साथ मुझे वह जानकारी मिलती है जब मुझे कैब निकाला जा रहा है, लेकिन यह यूआई
निजी void CabinetFile_FileExtractBefore (ऑब्जेक्ट प्रेषक, System.EventArgs ई) {TFile फ़ाइल = (TFile) प्रेषक पर परिलक्षित नहीं है; FileExtract = file.FullName; } निजी शून्य कैबिनेटफ़ाइल_फाइलएक्टेक्टकंपूर्ण (ऑब्जेक्ट प्रेषक, System.EventArgs ई) {गणना ++; प्रतिशत = कन्वर्ट.ToInt32 (((दशमलव) गणना / (दशमलव) m_CabinetFile.FileCount) * 100); }
FileExtract और
प्रतिशत गुण एक्सएएमएल यूआई के लिए बाध्य हैं, जो कोड में अपडेट हो रहा है लेकिन यूआई में नहीं। जब तक पूरी कैब निकाली नहीं जा रही है तब तक यूआई फंस जाता है।
हमेशा
BackgroundWorker का उपयोग करें WPF में गहन कंप्यूटेशन करें मुख्य थ्रेड UI रेंडरिंग के लिए ज़िम्मेदार है और यदि इसे निकालने में व्यस्त है, तो यह अन्य अनुरोधों का जवाब नहीं दे सकता है।
बैकग्राडडवर्ककर वर्ग वर्तमान प्रगति की रिपोर्ट करने के लिए कॉलबैक भी प्रदान करता है, जिसका उपयोग आप उपयोगकर्ता को यूआई में सूचित करने के लिए कर सकते हैं।
Comments
Post a Comment