मेरे पास रिपोर्ट मोड में ListView के साथ एक Windows फ़ॉर्म है। दृश्य में प्रत्येक आइटम के लिए, मुझे एक लंबे समय तक चलने वाले ऑपरेशन करने की आवश्यकता है, जिसके परिणामस्वरूप एक संख्या है।MsgWaitForMultipleObjects के सी # समकक्ष क्या है?
जिस तरह से मैं देशी Win32 में ऐसा करता हूं, वह प्रत्येक आइटम के लिए एक कार्यकर्ता धागा बनाना है (निश्चित रूप से, मैं धागे की असंबद्ध संख्या नहीं बनाऊंगा) और फिर थ्रेड हैंडल की सरणी पर MsgWaitForMultipleObjects()। चूंकि प्रत्येक गणना समाप्त होती है, थ्रेड सिग्नल और मुख्य यूआई थ्रेड उठता है और अपडेट करता है। इस बीच, हम संदेशों को पंप करते हैं ताकि यूआई थ्रेड उत्तरदायी रहे।
कोई भी उदाहरण दे सकता है कि यह सी # में कैसे काम कर सकता है? मैंने मॉनीटर ऑब्जेक्ट को देखा है, और ऐसा लगता है कि मैं क्या चाहता हूं-या अवरुद्ध करते समय संदेश पंप करता है?
धन्यवाद।
संपादित करें: ऐसा लगता है कि WaitHandler.WaitAny() वास्तव में संदेशों को पंप कर सकता है। सीएलआर में संदेश पंपिंग पर cbrumme's treatise देखें।
आप सही हैं, मॉनीटर संदेश पंप नहीं करता है। WaitHandle देखने के लिए एक बेहतर जगह हो सकती है, लेकिन मुझे प्रतीक्षा करेंंडल विधि नहीं मिली जो संदेश को पंप करता था। – itowlson
हाँ, मैंने यह भी देखा। यह एक आवश्यकता नहीं है कि मैं कई वस्तुओं पर इंतजार कर पाऊंगा। मैं एक भी घटना या कुछ के लिए इंतजार करूँगा ... मैं सिर्फ यूआई को अवरुद्ध नहीं करना चाहता हूं। मैंने पाया है कि सभी नमूने 'नींद (100) 'या एक संदर्भ स्विच मजबूर करने के लिए कुछ है, जो बहुत दुखी है। –
मुझे लगता है कि समस्या यह है कि WinForms में संदेश लूप स्पष्ट नहीं है। तो आप सीधे एक MsgWaitX नहीं कर सका, आपको इसके बजाय कुछ ऐसी चीज चाहिए जो एक ईवेंट उठाएगी। उदाहरण के लिए, प्रत्येक उपटस्क को पृष्ठभूमिवर्कर के रूप में चलाएं (और सिंक प्राइमेटिव के बारे में भूल जाएं)। – itowlson