मेरे पास एक परिदृश्य है जहां मेरे पास Winforms में डेटाग्रिड से जुड़ी वस्तुओं का संग्रह है। यदि कोई उपयोगकर्ता ग्रिड पर किसी आइटम को ड्रैग और ड्रॉप करता है, तो मुझे ग्रिड में प्लेसहोल्डर पंक्ति जोड़ने और लंबी एसिंक आयात प्रक्रिया को बंद करने की आवश्यकता होती है। मुझे UI में वापस एसिंक आयात प्रक्रिया की स्थिति को संवाद करने की आवश्यकता है, ग्रिड में पंक्ति को अपडेट करना और UI को अन्य पंक्तियों को संपादित करने की अनुमति देने के लिए उत्तरदायी बने रहें।WinForms में डाटाबेसिंग async डेटा आयात
ऐसा करने के लिए सबसे अच्छा अभ्यास क्या है?
मेरा वर्तमान समाधान है: ग्रिड में thread safe implementation of BindingList बाध्यकारी, जो ग्रिड में पंक्तियों के रूप में प्रदर्शित वस्तुओं से भरा हुआ है। जब कोई उपयोगकर्ता ग्रिड पर किसी आइटम को ड्रैग और ड्रॉप करता है, तो मैं एक नई ऑब्जेक्ट बनाता हूं जिसमें गिराए गए आइटम से प्राप्त स्पैस जानकारी होती है और उस पंक्ति के संपादन को अक्षम करने के लिए बाध्यकारी सूची में जोड़ें। मैं फिर आयात करने के लिए एक अलग थ्रेड को आग लगा देता हूं, इसे डेटा से भरने के लिए बनाई गई नई बाध्य वस्तु को पास करता हूं। आयात प्रक्रिया, समय-समय पर ऑब्जेक्ट की स्थिति सेट करती है और यूआई द्वारा सब्सक्राइब की गई एक घटना को आग लगती है जो ऑब्जेक्ट पर नई गुण देखने के लिए ग्रिड को रीफ्रेश करने के लिए कहती है।
क्या मुझे उसी ऑब्जेक्ट को पास करना चाहिए जो आयात प्रक्रिया थ्रेड पर ग्रिड से जुड़ा हुआ है, या मुझे एक प्रतिलिपि बनाना चाहिए और BeginInvoke का उपयोग करके UI थ्रेड पर ऑब्जेक्ट में परिवर्तनों को विलय करना चाहिए?
इस कार्यान्वयन के साथ कोई समस्या या सलाह?
धन्यवाद
बाध्यकारी सूची में निहित आपकी ऑब्जेक्ट्स की प्रकृति के बारे में अधिक जानने के बिना वास्तव में बताना मुश्किल है। क्या वे स्वयं भी थ्रेड-सुरक्षित हैं? यदि हां, तो किस कीमत पर? क्या वे सिर्फ सादे क्षेत्रों का एक सेट हैं, या क्या कुछ जटिल डेटा संरचनाएं हैं, जैसे सूचियां और पेड़ शामिल हैं? पूर्व मामले में, आप इसे छोड़कर इसे छोड़ सकते हैं: यह "एक लेखक, एक पाठक" स्थिति है, थ्रेड-सुरक्षित होना चाहिए। बाद के मामले में, इस बात पर निर्भर करता है कि आप थ्रेड सुरक्षा कैसे सुनिश्चित करते हैं: यह एक महत्वपूर्ण प्रदर्शन जुर्माना उत्पन्न कर सकता है। किसी भी तरह, कृपया वस्तुओं के बारे में और बताएं, तो यह बताना आसान होगा। –