मुझे एक Winforms एप्लिकेशन विरासत में मिला है जो यूआई थ्रेड से एप्लिकेशन सर्वर में बहुत अधिक लंबी कॉल करता है, इसलिए UI कुछ समय के लिए उत्तरदायी, अनुपयोगी, अव्यवस्थित रहता है । (बनाता कौन सा मुझे वास्तव में जाना AAAAAAAAARGH!)पृष्ठभूमि थ्रेड चल रहा है, जबकि Winforms UI को अवरुद्ध करने के लिए कैसे करें
मैं सर्वर एक पृष्ठभूमि धागा करने के लिए कॉल स्थानांतरित करने के लिए योजना बनाने और यूआई अक्षम है - लेकिन चल & closable - समय पृष्ठभूमि धागा अपने काम करता है।
तो मेरे आवेदन में उपयोगकर्ता इनपुट को बाधित करने का सबसे अच्छा तरीका क्या होगा? मैं "मोडल प्रोग्रेस डायलॉग" की लाइनों के साथ सोच रहा हूं, लेकिन मैं एक ऐसा समाधान पसंद करूंगा जो मुझे उपयोगकर्ता के चेहरे में दृश्यों को फेंकने के लिए मजबूर नहीं करता है (कुछ सर्वर ऑपरेशंस 500ms से कम के भीतर चलते हैं, इसलिए एक संवाद नहीं है इष्टतम ...)
क्या Winforms में उपयोगकर्ता को कुछ चुनिंदा चीजों (आकार बदलने, दिखाने, छिपाने और परिवार और खिड़की को बंद करने वाले उपयोगकर्ता के माध्यम से एप्लिकेशन को क्रियाएं लॉन्च करने या एप्लिकेशन में डेटा बदलने से रोकने का कोई तरीका है))? मैं एक ऐसा तरीका पसंद करूंगा जो मुझे मेरे फॉर्म में प्रत्येक यूआई तत्व को एक्सेस न करे और इसे अक्षम कर दें ... उनमें से बहुत सारे हैं और उस एप्लिकेशन में वास्तव में "यूआई डिज़ाइनर में हैक किया गया है जब तक यह चमकदार चीजें नहीं दिखाता "स्रोत कोड की शैली। रिलीज की तारीख तक हर बदबूदार बात पुनर्रचना का कोई रास्ता नहीं ...
ओह, वैसे, इस एप्लिकेशन .नेट फ्रेमवर्क में रहती है 2
आप लंबे समय तक चलने वाले कॉल को शुरू करने वाले बटन को अक्षम क्यों नहीं करते? –
यूआई एक डेटा एंट्री फॉर्म है, लंबी चल रही कॉल एक "सेव" हो सकती है जिसमें कई डोमेन ऑब्जेक्ट शामिल हैं। उदाहरण के लिए सहेजते समय मैं उपयोगकर्ता को फ़ॉर्म में किसी भी डेटा को बदलने से रोकना चाहता हूं। वैसे (http://stuffthathappens.com/blog/2008/03/05/simplicity) बहुत सच है ... – froh42
जब आप फॉर्म को वापस सक्षम करना चाहते हैं? यदि आप इसे "_RunWorkerCompleted" ईवेंट पर करने का प्रयास करते हैं तो आपको अपवाद मिलेगा क्योंकि आपको अनुमति नहीं है (http://msdn.microsoft.com/en-us/library/system.componentmodel.backgroundworker.aspx - पहला नोट)। आप फॉर्म में या पहले कंटेनर के लिए प्रत्येक आइटम के लिए इसे मैन्युअल रूप से कर सकते हैं। – Edd