c# - How can you tell if you're on the Main UI thread? (In CF) -
अब दुर्भाग्यवश तथ्य यह है कि WinCE USB डिवाइस आगमन / रिमाउंट को विंडोजमैसेज के माध्यम से उजागर करता है, मुझे यह सुनिश्चित करना है कि एक निश्चित (गैर -यूआई) घटक पृष्ठभूमि धागा पर बनाया गया नहीं है। मैं इसे एक अपवाद के माध्यम से जोर देना चाहता हूं, लेकिन इस दावे के लिए कोड की कमी है।
यह घटक एक MessageWindow * बनाता है और इसका इस्तेमाल यूएसबी पहुंच / निकाले संदेशों को प्राप्त करने के लिए करता है। यह समस्या तब होती है जब कोई पृष्ठभूमि थ्रेड पर इस घटक को बनाता है (जरूरी नहीं कि; IsBackground = true) जब थ्रेड विंडो से बाहर निकलता है।
कोई भी विचार?
*
अपडेट
मुझे लगता है कि मेरा संस्करण 1 बहुत स्पष्ट नहीं था। तो यह v2 है।
जब आप एक धागा पर उस बात के लिए एक संदेश विन्डो या एक फॉर्म बनाते हैं, जब वह धागा विंडो / फॉर्म से बाहर निकलता है, तो नष्ट हो जाता है।
मेरा घटक एक "छिपी" संदेश विंडो कुछ महत्वपूर्ण घटनाओं को रोकना, इसलिए मैं इसे नष्ट करने के लिए नहीं चाहता इसलिए मुझे किसी भी तरह से यह सुनिश्चित करना होगा कि "मेन यूआई" धागा पर फार्म का निर्माण करने वाला कोड चल रहा है।
यदि संभव हो तो मैं इस घटक को "मुख्य" फ़ॉर्म के संदर्भ को गुजरने से बचना चाहूंगा जैसा कि यह (वास्तुशिल्प रूप से बोल रहा है) यूआई से मील दूर होना चाहिए।
अपडेट
लॉगिंग प्रश्न को एक अलग प्रश्न पर ले जाना।
ठीक है, मैं समझता हूं कि आप अपने घटक को मुख्य विंडो के बारे में "पता" नहीं करना चाहते - समझ में आता है ।
कैसे इस बारे में: यदि आप सुनिश्चित करते हैं कि आप हमेशा मुख्य थैले पर अपने घटक को इंगित करते हैं? आप घटक निर्माता के धागे पर श्रोता विंडो बनाएंगे।
यदि आप ऐसा करते हैं, तो आपको यह सुनिश्चित करने की ज़रूरत है कि आप मुख्य थ्रेड से कन्स्ट्रक्टर को कॉल करें। मैं आपके कोड के बारे में कुछ मान्यताओं को बना रहा हूं, लेकिन मुझे लग रहा है कि आपकी वास्तुकला में कुछ वर्ग होना चाहिए जो कि दोनों UI और आपके घटक के बारे में जानता है कॉलबैक का उपयोग करते हुए, और मुख्य रूप से InvokeRequired / Invoke विधियों का उपयोग करके अपना घटक बनाएं।
Comments
Post a Comment