एक अच्छा Minimal, Complete, and Verifiable code example बिना है, यह असंभव है यह सुनिश्चित करने के लिए कि यहां सबसे अच्छा जवाब क्या है। हालांकि, आपके विवरण से ऐसा लगता है कि भूलभुलैया उत्पन्न करने वाला एल्गोरिदम यूआई थ्रेड में निष्पादित कर रहा है, यूआई को खुद को अपडेट करने से रोक रहा है।
बस के रूप में Winforms, जहां लोगों Refresh()
या Application.DoEvents()
, यहाँ असली समस्या की तरह तरीकों कॉल करने के लिए आकर्षक हैं के साथ मामले में कि आप यूआई धागा अवरुद्ध कर रहे हैं है। सही इसे ठीक करने का तरीका है, ऐसा न करें।
बहुत सारे विकल्प हैं और बिना किसी विस्तृत प्रश्न के आपके पास यह जानने का कोई तरीका नहीं है कि आपके मामले में सबसे अच्छा तरीका क्या होगा। हालांकि, Progress<T>
कक्षा के साथ संयोजन में BackgroundWorker
, या Task.Run()
का उपयोग करने के लिए सबसे अधिक उपयोग किए जाने वाले और सबसे अधिक उपयुक्त तकनीकों का उपयोग करना है। किसी भी मामले में, आपका एल्गोरिदम एक अलग धागे में चलता है, जो यूआई थ्रेड को समय-समय पर अपडेट पास करता है (उदाहरण के लिए प्रत्येक आयत, प्रत्येक दस आयताकार, जो भी हो)। यूआई थ्रेड को एक अपडेट प्राप्त होता है, दृश्यों को डेटा जोड़ता है, और फिर अगले अपडेट के लिए प्रतीक्षा करने के लिए वापस चला जाता है।
BackgroundWorker
और Progress<T>
दोनों यूआई थ्रेड पर डेटा को स्वचालित रूप से मार्शल करने के लिए अंतर्निहित तंत्र प्रदान करते हैं। एकमात्र चेतावनी यह है कि आप जिन कक्षाओं का उपयोग कर रहे हैं, उस वर्ग का उदाहरण यूआई थ्रेड पर बनाया जाना चाहिए। चूंकि आपको एसिंक्रोनस काम को निष्पादित करने से पहले सेट अप करने की आवश्यकता है, इसलिए यह आमतौर पर कोई समस्या नहीं है; यह मुफ्त में आता है।
यदि आप इसे इस तरह से करते हैं, तो आपको यहां तक कि यहां सुझाए गए तीन अलग-अलग हिस्सों जैसे किसी भी हैक की आवश्यकता नहीं होगी (जिनमें से दो को अवरुद्ध कर दिया गया है " मेरा यूआई थ्रेड, अब क्या? "वैसे भी परिदृश्य)।
स्रोत
2016-06-23 17:11:00
यह 100% समाधान नहीं था, लेकिन यह मुझे सही दिशा में शुरू किया। आखिरकार यह क्या काम करता है: 'कैनवास। डिस्पैचर.इनवोक (खाली डिलीगेट, डिस्पैचर प्राइरिटी.रेंडर);' जहां खाली डिलीगेट है 'एक्शन रिक्त डिलीगेट = प्रतिनिधि {}; ' – ohmusama
धन्यवाद, साइमन, जो आपने पहले किया था, उसके लिए धन्यवाद। मैं अब लेख पढ़ रहा हूँ। – philologon
"डिस्पैचर के साथ अधिक उत्तरदायी ऐप्स बनाएं" का लिंक अब काम नहीं करता है। –