कभी-कभी उपयोगकर्ता एक विस्तारित तकनीकी ऑपरेशन शुरू करता है जिसे निष्पादित करने में थोड़ा समय लगता है। इन मामलों में, आमतौर पर किसी प्रकार की प्रगति पट्टी प्रदर्शित करना अच्छा होता है, साथ ही इस बात की जानकारी भी दी जाती है कि किस कार्य को अभी निष्पादित किया जा रहा है।
UI और लॉजिक लेयर्स के करीबी युग्मन से बचने के लिए, आमतौर पर किसी प्रकार के प्रॉक्सी के माध्यम से संचार होना सबसे अच्छा होता है। यही है, बैक-एंड को अपने स्वयं के UI तत्वों में हेरफेर नहीं करना चाहिए, या सीधे मध्यस्थ परत के साथ बातचीत भी नहीं करनी चाहिए।
जाहिर है, इस काम को करने के लिए कहीं न कहीं कॉल बैक करना होगा। मैंने आमतौर पर इसे दो तरीकों में से एक में लागू किया है:
बैक-एंड के लिए एक परिवर्तनशील वस्तु को पास करें, और बैक-एंड में प्रगति पर इसमें बदलाव करें। जब कोई परिवर्तन होता है तो ऑब्जेक्ट फ्रंट-एंड को सूचित करता है।
फॉर्म के कॉल-बैक फ़ंक्शन
void f(ProgressObject)
याProgressObject -> unit
बैक-एंड इनवॉइस पास करें। इस मामले में, बैक-एंड निर्माण करता हैProgressObject
और यह पूरी तरह से निष्क्रिय है। जब भी मैं प्रगति की रिपोर्ट करना चाहता हूं, उसे हर बार एक नई वस्तु का निर्माण करना चाहिए।
इन तरीकों की कमियां और फायदे क्या हैं? क्या उपयोग करने के लिए सहमत-सर्वोत्तम विधि है? क्या उनके उपयोग के लिए अलग-अलग परिस्थितियां हैं?
क्या रिपोर्टिंग प्रगति की पूरी तरह से अलग-अलग तकनीकें हैं जिन्हें मैंने अनदेखा कर दिया है?
BackgroundWorker
उस आरएच का उपयोग करते हैं। एक "प्रगति फ़ॉर्म", आदि के साथ एक कस्टम वर्ग में लिपटे हुए और एक अपवाद के संचार के लिए एक सरल तंत्र - जैसा BackgroundWorker
कि डिज़ाइन द्वारा एक अलग थ्रेड में चलता है। कुछ हद तक हम इसकी विशेषताओं का उपयोग .Net द्वारा सुझाए गए तरीके से करते हैं और फिर इसे मुहावरेदार कहा जा सकता है। और किसी भी भाषा / ढांचे के संदर्भ में "मुहावरेदार" सबसे अच्छा हो सकता है।