2012-10-25 9 views
6

मैं एक जीयूआई डिजाइन कर रहा हूं और मेरे पास एक लेबल है जिसे मैं प्रभावी रूप से 'कृपया प्रतीक्षा करें' संदेश के रूप में उपयोग करता हूं, जब मैं कुछ समय लेता हूं। लेबल का टेक्स्ट स्थिर है, मैंने इसे लेबल नियंत्रण के लिए VS2010 में गुणों में सेट किया है।सी # WinForms लेबल प्रदर्शित होगा, लेकिन पाठ नहीं दिखाएगा

जब मैंने फॉर्म पर उस क्रिया को मारा, तो मैं .how() नियंत्रण जो आम तौर पर समय लेने वाली प्रक्रिया पूरी होने तक छुपा रहता है, फिर। (।)। जब यह हिट करता है .how() लेबल पॉप अप करता है (मुझे यह पता है क्योंकि मेरे पास सीमा 3 डी पर सीमाबद्ध सेट है, इसलिए मैं लेबल शो की सीमा देखता हूं) लेकिन इसमें कोई टेक्स्ट नहीं है। मैंने लेबल को ऑटोसाइज करने के लिए सेट करने का प्रयास किया है और इसका कोई फायदा नहीं हुआ है, मेरा टेक्स्ट ग्रे पर काला पर सेट है, इसलिए कोई अदृश्य स्याही नहीं है, सब कुछ दिखाई दे रहा है, फ़ॉन्ट सेट है। संहिता निष्पादित करता है क्योंकि मैं इसे पूरे करना चाहता हूं, लेबल में बस कोई पाठ नहीं है। मुझे हानि हो रही है।

कोई विचार?

उत्तर

10

यदि समय लेने वाली प्रक्रिया एक ही थ्रेड पर हो रही है, तो यह रीफ्रेश/रेड्रो मुद्दा हो सकता है (जहां प्रोसेसर यूआई अनुरोधों को संभालने में बहुत व्यस्त है)। लंबे समय तक चलने वाली प्रक्रिया शुरू करने से पहले खिड़की को रीफ्रेश करने का प्रयास करें या अधिक उचित रूप से, पृष्ठभूमिवर्कर में समय लेने वाली प्रक्रिया डालें।

+0

यह एक ही थ्रेड पर नहीं होता है लेकिन प्रक्रिया शुरू होने से पहले शो कॉल निष्पादित हो रहा है, और छुपा कॉल प्रक्रिया पर .waitforExit() के बाद है। दोनों कॉल निष्पादित हो रही हैं और लेबल दिखाई दे रहा है और उम्मीद के रूप में गायब हो रहा है, यह सिर्फ –

+0

पाठ को याद कर रहा है। यह सही जवाब साबित हुआ है, .shresh() के बाद लेबल पर .refresh() को ठीक किया गया है। अजीब, लगता है कि यह सिर्फ उस प्रक्रिया को शुरू करने से पहले बट में अतिरिक्त किक की आवश्यकता है ताकि वह खुद को चित्रित कर सके और अपनी संपत्तियों को सही ढंग से लागू कर सके। धन्यवाद! –

3

शायद मुझे कुछ याद आ रहा है, लेकिन आप अभी label.Visible क्यों सेट नहीं करते हैं?

+2

.show() और .hide() कहने के बराबर हैं .visible = true और .visible = false। तो, एक ही प्रभाव। लेबल दिखा रहा है, लेकिन कोई पाठ –

6

यदि समय लेने वाली प्रक्रिया पृष्ठभूमि थ्रेड में निष्पादित नहीं हो रही है, तो आपका यूआई अद्यतन नहीं हो रहा है क्योंकि कोई संदेश प्रसंस्करण नहीं हो रहा है। नियंत्रण WM_Paint संदेशों में खुद को फिर से हटा दें।

लंबी प्रक्रिया में डाइविंग से पहले, अपने राज्य को बदलने के बाद नियंत्रण पर या उसके विंडो-हैंडल पैरेंट (फॉर्म) पर रीफ्रेश कॉल करने का प्रयास करें।

या, यूआई थ्रेड को मुक्त करने के लिए लंबी अवधि की प्रक्रिया को पृष्ठभूमि थ्रेड (.NET 4.0 कार्य देखें) में ले जाएं।

+0

यह सही जवाब था, लेकिन मैंने साइबोर्ग को हरा चेक दिया क्योंकि उसने इसे एक मिनट तेज बताया। हालांकि मदद के लिए धन्यवाद, अभी भी ऊपर उठाया –

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