2012-12-26 14 views
6

मेरे पास एक विंडोज़ फॉर्म है, जिसमें एक टेक्स्टबॉक्स और डेटाग्रिडव्यू है। जैसे ही टेक्स्टबॉक्स का टेक्स्ट बदल जाता है, डेटाग्रिडव्यू का डेटासोर्स अपडेट किया जाता है। यह टेक्स्टबॉक्स के टेक्स्ट चेंज किए गए ईवेंट को संभालने और उदाहरण के लिए डेटासोर्स को एक नई सूची असाइन करके किया जाता है। आम तौर पर नए डेटास्रोत में 1000+ पंक्तियां होती हैं, जो काफी बड़ी मात्रा में डेटा होती है। इसके अलावा, इस सूची को लाने के लिए डीबी से पूछताछ भी समय लेने वाली है।डेटाग्रिड व्यू का जादू

मुझे आश्चर्य की बात है कि अगर मैं टेक्स्टबॉक्स में पर्याप्त तेज़ टाइप करता हूं, तो डाटाग्रिड बार-बार प्रतिपादन को निलंबित करता है, और यह केवल अंतिम परिणाम प्रस्तुत करता है। यह पूरी तरह से मध्य परिणामों को अनदेखा करता है। यह समझ में आता है क्योंकि चल रहे यूआई थ्रेड लगातार पाठ परिवर्तनों के दौरान व्यस्त है। लेकिन मैं अभी भी टेक्स्टबॉक्स में क्यों टाइप कर सकता हूं?

  1. TextChange
  2. डेटा प्राप्त करने
  3. ताज़ा किया जा रहा DataGridView
  4. TextChange
  5. डेटा प्राप्त करने
  6. ताज़ा किया जा रहा DataGridView (प्रतिपादन के बिना/पेंटिंग)
  7. ... TextChange (प्रतिपादन/चित्रकला के बिना)
  8. डेटा प्राप्त करना
  9. ताज़ा डेटाग्रिड व्यू (फिनली रेंडरिंग/पेंटिंग)
  10. हो गया।

ऐसा लगता है कि टेक्स्टबॉक्स किसी अन्य धागे पर था लेकिन यह बिल्कुल नहीं है। क्या किसी को पता है क्यों?

उत्तर

6

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

एक बार जब धागा खत्म हो जाता है, तो यह संदेश लूप (एप्लिकेशन.रुन() द्वारा शुरू किया गया) फिर से दर्ज करता है, कतार से संदेश पुनर्प्राप्त करता है और इसे संभालता है। कौन सा मोड़ TextChange घटना को आग लगने का कारण बनता है। तो कतार को देखने का एक अच्छा तरीका बफर के रूप में है। यह डिफ़ॉल्ट रूप से 10,000 घटनाओं को स्टोर कर सकता है।

+0

यह सच है। लेकिन टेक्स्टबॉक्स वास्तव में इनपुट संदेश (कुंजी प्रेस संदेश) को क्यों संसाधित करता है लेकिन डीजीवी प्रत्येक कीप्रेस के बाद खुद को प्रस्तुत नहीं करता है? – Alireza

+1

पेंट संदेश कम प्राथमिकता संदेश है, केवल कतार खाली होने पर ही वितरित किया जाता है। –

+0

धन्यवाद हंस। मैं यूआई थ्रेड, संदेश लूप और संदेशों की प्राथमिकता के बारे में और जानना चाहता हूं। क्या आप कृपया एक अच्छा संदर्भ नामित करेंगे? – Alireza