2011-10-14 11 views
8

क्या कोई तरीका है कि मैं Winforms में सभी यूआई अपडेट कमांड रोक सकता हूं?क्या मेरा फॉर्म लोड होने पर मैं अपना यूआई प्रतिपादन जमा कर सकता हूं?

या मुझे थोड़ी सी लग रही है कि मैं इस बारे में पूरी तरह से गलत तरीके से जाने की कोशिश कर रहा हूं, तो मेरी समस्या के आसपास एक और तरीका है: मैं मूल रूप से नियंत्रण की एक सहेजी गई स्थिति लोड करता हूं, जो इसके ऊपर नए नियंत्रण लोड करता है। हालांकि मैं यूआई थ्रेड में इनमें से कुछ करता हूं, और कुछ अन्य थ्रेड से डेटा लोड हो रहा है, जो तब यूआई भरता है।

तो प्रभाव रहा है जब यह लोड कर रहा है यह है कि उपयोगकर्ता, आदि, एक ही स्थान पर प्रदर्शित होने तो फार्म पर एक अन्य जगह पर ले जाकर मूल्यों में परिवर्तन नियंत्रण के कुछ देख सकते हैं

मैं था इसके बजाय लोडिंग स्क्रीन प्राप्त करना और पृष्ठभूमि में नियंत्रण लोड करना चाहते हैं। यह काफी बड़ा एप्लीकेशन है और यह इतना महत्वपूर्ण नहीं है कि मेरे कोड को फिर से डिजाइन करना वास्तव में एक विकल्प नहीं है।

क्या कोई विधि निष्पादित होने पर मैं बस सभी अपडेट() कमांड को नियंत्रण पर रोक सकता हूं?

+0

मेरे सुझाव - न शो प्रपत्र जबकि इसके प्रतिपादन। यदि आप यूआई उपयोगकर्ता को फ्रीज खाली फॉर्म देख सकते हैं और थोड़ी देर के बाद सभी नियंत्रण दिखाई देते हैं। – Reniuz

+0

यह ठीक है, खेद है कि मैंने इस बिट को समझाया नहीं। डिफ़ॉल्ट रूप में इस नियंत्रण का एक खाली संस्करण होता है और फिर उपयोगकर्ता नियंत्रण को खींच सकता है और कुछ विकल्प चुन सकता है, नए नियंत्रण जोड़ सकता है, आदि, फिर नियंत्रण के राज्य को एक्सएमएल में सहेज सकता है। यह प्रश्न तब होता है जब उपयोगकर्ता मौजूदा फ़ाइल खोलने का निर्णय लेता है। – Connell

उत्तर

12

आप एक ऑपरेशन में यूआई के सेटअप को लपेटने के लिए SuspendLayout और ResumeLayout विधियों का उपयोग कर सकते हैं (प्रतिपादन के अपडेट के बिना)।

मूल रूप से (यह मानते हुए SomeMethod प्रपत्र कक्षा में है):

private void SomeMethod() 
{ 
    this.SuspendLayout(); 
    // all UI setup 
    this.ResumeLayout(); 
} 
+1

शानदार, मुझे पता था कि यह कुछ आसान होगा, मैं बस गलत सामानों के लिए गुगलिंग कर रहा था। धन्यवाद! – Connell

+0

Unfortuntelly यह काम नहीं करता है जबकि फॉर्म पहले से ही दिखाई दे रहा है। एक बेहतर तरीका है: http://stackoverflow.com/questions/13711812/parallel- जनरेशन-of-ui/15020157#15020157 –

4

यह वास्तव में आपके प्रपत्र तर्क पर निर्भर करता है, सामान्य रूप में आप बहुत ज्यादा चीजों के साथ Load या Show विधि ओवरलोड नहीं चाहिए, ताकि फार्म कर सकते हैं दिखाया और जल्दी खींचा और हमेशा उत्तरदायी देखो।

कुछ मामलों में यह SuspendLayout और ResumeLayout तरीकों का उपयोग करने के लिए मदद कर सकता है में

, यहाँ देखें: Control.SuspendLayout Method

+0

यह लोड पर नहीं है। नियंत्रण लोडिंग प्रारंभ में डिजाइनर कोड में है, जो इस तरह के रिक्त नियंत्रण को लोड करता है। लेकिन उपयोगकर्ता को फ़ाइल खोलने के लिए संकेत मिलने के बाद नियंत्रण फ़ाइल पर एक लोडडेटा विधि है जो एक XML फ़ाइल से फॉर्म स्थिति लोड कर रहा है। – Connell

संबंधित मुद्दे